Spiele proggen ohne große Mathematik Kentnisse?
-
-
Niemand würde mit Sin und Cos einen 2D-Kreis zeichnen
Ich kenne viele für die das Gang und Gäbe ist! Und es ist das konkreteste Beispiel das es gibt.
dafür gibt es einen viel schnelleren Algorithmus
Das Schnellste ist immer noch die Sinus und Kosinus Tabelle. Erstell einfach einen Array und füll ihn mit den Ergebnissen von Sinus und Kosinus aus. Wenn du es schafft einen schnelleren Algorithmus vorzulegen dann Hut ab.
Und komm jetzt nicht mit dem Argument das es unexakt ist! 360 Grad sind genauer als man brauch bei Auflösungen wie 1024x798 und 800x600.
Den Hauptzweck von Sin und Cos hast Du gar nicht erwähnt.
Sag mal wie willst du wissen was für mich den "Hauptzweck" zu sein hat? Ist der viel mathematisch definiert?
wow danke für den crashkurs
ich druck mir des ma an und schau mir des ma genauer an!Gern geschen. Ach und gestern ist es mir ein kleiner Fehler unterlaufen:
cos(gradzurad(0))=1;//X wert für Links
sin(gradzurad(0))=0;//Y wert für Links
cos(gradzurad(180))=-1;//X wert für Rechts
sin(gradzurad(180))=0;//Y wert für RechtsDas sollte eigentlich:
cos(gradzurad(0))=1;//X wert für Rechts
sin(gradzurad(0))=0;//Y wert für Rechts
cos(gradzurad(180))=-1;//X wert für Links
sin(gradzurad(180))=0;//Y wert für Linkssein.
Und benutz bei Mathe immer float oder double! int und co geben oft schwer zu findende Fehler!
-
drVoodoo schrieb:
Das Schnellste ist immer noch die Sinus und Kosinus Tabelle. Erstell einfach einen Array und füll ihn mit den Ergebnissen von Sinus und Kosinus aus. Wenn du es schafft einen schnelleren Algorithmus vorzulegen dann Hut ab.
Der Kreis-Algorithmus von Bresenham ist soweit ich weiß der schnellste:
http://www-lehre.informatik.uni-osnabrueck.de/~cg/2000/skript/3_4_Kreis.htmlDeine Methode ist in jedem Fall ungenau, wenn Du große Kreise zeichnest, denn dann musst Du schon entweder
a) sehr viele Einträge in Deine Sin-/Cos-Tabelle schreiben, oder
b) die einzelnen Punkte durch Linien verbinden.Wenn Du das nicht tust, dann hast Du nachher keinen Kreis mehr, sondern einen Haufen getrennter Pixel. Also zieh schonmal Deinen Hut, lieber Freund!
-
Ließe sich das Ganze nicht auch über die Kreisrelation
x*x + y*y = r*r
machen, wenn man ein Koordinatensystem "einführt", wo Ursprung = Kreismittelpunkt?
Wenn das in dem Zusammenhang Mist ist, dann macht mich bitte nicht fertig, habe keinen Plan von Spieleprogrammierung ;). Aber soweit ich mir das vorstellen kann, ist doch Vektorgeometrie und das Lösen linearer Gleichungssysteme (Gauß + Cramer/Sarrus) zur Kollisionsabfrage auch elementar für Spiele oder?
-
EDIT: Sorry, verklickt... Kann man Beiträge löschen?
-
Ich weiß nicht, wie Du das genau machen willst, vielleicht alle x-Pixel durchgehen und die zwei Lösungen für y berechnen?
Der Bresenham-Algorithmus ist trotzdem schneller, man braucht in der Iteration nur ein paar Additionen und ein paar Subtraktionen. Keine Multiplikationen, keine Divisionen und kein Wurzelziehen. Es würde mich schwer wundern, wenn es noch was schnelleres gäbe.
-
Also, ohne den Bresenham-Algo zu kennen, würde ich es so angehen (gesetzt der Fall, es gäbe eine Funktion "DrawPixel" und OHNE Umwandlung der relativen Kreis-Koordinaten in absolute Bildschirm-Koordinaten):
int x, y, r; // x: x-Koordinate, y: y-Koordinate, r: Kreisradius for(x = -r; x <= r; i++) { y = sqrt(r*r - x*x); DrawPixel(x, y); // Fiktive DrawPixel-Funktion // Zeichnen des Pixels unterhalb der x-Achse y = -sqrt(r*r - x*x); DrawPixel(x, y); }
Ergibt das keinen Sinn?
-
Klar ergibt das Sinn (wenn Du aus "x" unter der Wurzel ein "x*x" machst, denn dann ist es richtig), es ist aber viel, viel langsamer im Vergleich zum Bresenham-Algorithmus. Aber auch Dein Code ließe sich noch sehr stark optimieren! Z.B. ist es unnötig, die zweite Wurzel zu berechnen, weil die ja gleich der ersten ist. Und es reicht auch, nur die Hälfte der x-Werte durchzugehen (man kann den Kreis ja spiegeln).
-
Jester schrieb:
Ich versteh jedenfalls nicht, wie es einige hier schaffe sich so sehr aufzuregen.
Also ich persönlich hab mich nicht aufgeregt. Das würde ich dann auch durch Smilies kenntlich machen. Ich hab nur meine Meinung zu dem Thema offengelegt, das darf man ja wohl noch?
Jester schrieb:
Ist ja toll LiquidAcid, daß Du das alles kannst, obwohl Du Zivildienst leistest, aber kann es sein, daß Du das vorher mal in der Schule gelernt hast?
Ich rühme mich nicht damit, dass ich mathematische Grundlagen beherrsche. Ich wollte damit einzig und allein ausdrücken, dass ich (zur Zeit) in keinem Feld tätig bin, was auch nur im entferntesten mit Mathematik zu tun hat (außer vielleicht die Kiddies durchzählen *g*).
Und ja, ich hatte in der Schule Mathe-Leistungskurs. Jedoch taucht Trigonometrie schon vor der Oberstufe auf und ist gewissermaßen Pflichtprogramm.
Darüberhinaus (und da rühme ich mich ebenfalls nicht für) kann ich auch noch sehr viel mehr, als der Mathematikunterricht uns geboten hat. Das ist eine einfache Feststellung.(Punkt)Jester schrieb:
Was ist, wenn expedition (kein Bock auf die tolle Schreibweise) das nicht in der Schule gelernt hat.
Warum wählt man auch Mathe ab, wenn man vor hat in die Softwarentwicklung einzusteigen? Ich bin der Meinung, dass die Mathematik für die Informatik eine der essentiellen Grundlagen ist.
Jester schrieb:
Muß er es dann wirklich können? Viele Sachen kann man sich nur sehr schwer selbst aneignen.
Programmieren ist zum Großteil Autodidaktik, man erarbeitet sich sehr viel selber. Sowohl was den programmtechnischen als auch den algorithmustechnischen Teil angeht. Das was ich über Programmieren weiß hat mir kein Lehrer, Tutor, etc. beigebracht.
Jester schrieb:
Wenn man's dann aber einmal gefressen hat, dann isses ziemlich einfach. Trotzdem ist es dann für diejenigen, die es noch frisch lernen müssen nicht einfacher als zuvor.
Das habe ich auch nicht gesagt. Aber jeder halbwegs denkende Mensch wird die Mittel der Informationsbeschaffung kennen. Wie ich schon gesagt habe. Geht er kurz in die Schule und fragt dort nach ausrangierten Mathebüchern. Guckt kurz rein ob er was zu seinem Thema findet (oder nimmt gleich alle mit, würde ich persönlich immer machen (/me = Büchersammler)). Dann gehts halt nur noch darum das ganze zu lesen. Und bei Nichtverstehen nocheinmal wenns nötig ist.
Jester schrieb:
Aber die Masche: "Wie Du kannst kein Sinus? Dann kannste auch ned programmieren." Sowas find ich echt scheiße. Wieso soll er denn nicht programmieren.
Ich sag mal so. Auf bestimmten Teilbereichen wird er dann nur eingeschränkt programmieren können.
Jester schrieb:
Wenn er's dann wirklich braucht, dann wird er's auch verstehen. Und dann geht's auch gleich viel leichter, weil man einen konkreten Anwendungsfall vor Augen hat.
Na dann mal so. Wie gesagt, Autodidaktik rul3z!
cya
liquid
-
Warum wählt man auch Mathe ab, wenn man vor hat in die Softwarentwicklung einzusteigen? Ich bin der Meinung, dass die Mathematik für die Informatik eine der essentiellen Grundlagen ist.
ich hab es abgewählt da ich Beruf und Hobby trenne! ich will beruflich was wirtschaftliches machen. mit Programmieren denke ich komme ich beruflich nicht weit, ich hab halt schon viel darüber gelesen, wie schwer es ist.
Versteht ihr was ich meine? ich muss doch mehr auf meinen beruf achten als auf meinen hobby
edit: Glaubt nicht das ich zu faul bin irgendwelche Bücher zu lesen und den stoff zu lernen, im Gegenteil das macht mir sogar Spaß.
Ich hab ja nur gefragt ob ich da herum kommen würde
-
Du sagtest da eben was von Wirtschaft. Da spielt Mathe aber auch eine entscheidende Rolle. Was willste denn genau machen?
cya
liquid
-
LiquidAcid schrieb:
Du sagtest da eben was von Wirtschaft. Da spielt Mathe aber auch eine entscheidende Rolle. Was willste denn genau machen?
cya
liquidschon, wir hatten ja auch 1 Jahr Wirtschaftssmathematik (Zinsrechnung und CO)!
Das einzige was wir noch haben das annähernd was mit Mathematik zu tun hat ist rechnungswesen -> also Buchführung
Ich will warscheinlich mal Industriekaufmann machen ich bin mir aber noch nicht sicher.
-
LiquidAcid schrieb:
Jester schrieb:
Muß er es dann wirklich können? Viele Sachen kann man sich nur sehr schwer selbst aneignen.
Programmieren ist zum Großteil Autodidaktik, man erarbeitet sich sehr viel selber. Sowohl was den programmtechnischen als auch den algorithmustechnischen Teil angeht. Das was ich über Programmieren weiß hat mir kein Lehrer, Tutor, etc. beigebracht.
Ich habe hier von Mathematik gesprochen, und da gibt es so einige Sachen, die man sich nicht so ohne weiteres mal schnell durchlesen kann.
MfG Jester
-
Jester schrieb:
Ich habe hier von Mathematik gesprochen, und da gibt es so einige Sachen, die man sich nicht so ohne weiteres mal schnell durchlesen kann.
Da bin ich anderer Meinung. Wo ein Wille ist, ist auch ein Weg.
cya
liquid