Kann jemand diese Formel vereinfachen ??
-
wow echt genial danke
-
Wie gesagt, danke dir
Is denn nun die Klammer vom arccos um alles rum?
Was rechnest du damit?
-
Buena Vista schrieb:
also was geht:
[...] = sqrt((a[h]2[/h]*b[h]2[/h]*(x[h]2[/h]*y[h]2[/h])[h]2[/h])) Wurzelziehn = a*b*(x[h]2[/h]+y[h]2[/h])
Das gilt aber nur fuer positive Basen.
-
ax*ax = a2x2
Keine Angst, die werden positiv
Aber natürlich haste recht, habe +/- vergessen.
-
Hinweis: ax ist vermutlich a_x und nicht a*x. Dann ist das da oben falsch.
-
na wenn das nichtmal der aufgabensteller merkt..
-
naja das hat der aufgabensteller schon gemerkt denn:
ax ist keine multiplikation (a*x) sondern eine Variable
ich errechne damit ob eine bestimmte koordinate innerhalb oder außerhalb eines dreiecks liegt.
das problem ist diese formel braucht sehr lange um alle dreiecke zu überprüfen
es sind ca. 1500*800*200*3 berechnungen nötig
-
oggs_the_progger schrieb:
naja das hat der aufgabensteller schon gemerkt denn:
ax ist keine multiplikation (a*x) sondern eine Variable
ich errechne damit ob eine bestimmte koordinate innerhalb oder außerhalb eines dreiecks liegt.
das problem ist diese formel braucht sehr lange um alle dreiecke zu überprüfen
es sind ca. 1500*800*200*3 berechnungen nötig
vielleicht solltest du erstmal versuchen diese anzahl (1500*800*200*3 = 720.000.000 ) zu minimieren. In Echtzeit kriegt das kein Rechner hin.
-
oggs_the_progger schrieb:
α = 180/PI * arccos((ax*bx+ay*by)/sqrt((ax*ax+ay*ay)*(bx*bx+by*by))
normiere vorher die (ax,ay), (bx,by) dann wird die rechnung einfacher.
-
normieren
-
oggs_the_progger schrieb:
normieren
bei der formel möchtest du doch bloß nen winkel zwischen vektoren ausrechnen, oder? also ist die länge der dinger doch egal.
wenn du also in einem preprocessing-step eine normierung vornimmst, d.h
durch die länge teilst, d.hax' := ax / sqrt(ax2+ay2)
ay' := ay / sqrt(ax2+ay2)und dann mit ax' und ay' weiterrechnest.
kannst du dir die division durch sqrt(ax2+ay2) sparen.nichts desto trotz solltest du wirklich die anzahl der berechnungen minimieren.
das bringt VIEL mehr.
-
normieren = durch die norm teilen. damit sie laenge 1 haben. du teilst in deiner formel durch das produkt der euklidischen normen der beiden vektoren.
das fiele dann weg und waere sinnvoll, wenn das haeufig fuer dieselben vektoren gemacht wird. wenn natuerlich jeder nur einmal auftaucht, ist es egal, ob du das vor oder in der formel machst.wenn du gemerkt hast, dass man deine notation fehlinterpretiert hat, warum weist du nicht darauf hin sondern sagst "genial, danke"? das ist doch ein wenig irrefuehrend...
-
PeterTheMaster schrieb:
wenn du gemerkt hast, dass man deine notation fehlinterpretiert hat, warum weist du nicht darauf hin sondern sagst "genial, danke"? das ist doch ein wenig irrefuehrend...
Ja aber echt he
Na egal.
Ich hab mich schon gefreut über die tollen Terme, die so wunderbar aufgingen, aber den Sinn hab ich nicht geschnallt. Denn es käme ja immer der gleiche Winkel raus..
Übrigens, noch ne Frage, ist arccos( 1 ) = arccos( -1 ) ?
-
das ist genau dann der fall, wenn du einen winkel findest, dessen kosinus sowohl 1 als auch -1 ist.
ernsthaft: nein, umkehrrelationen von funktionen sind notwendigerweise injektiv, da funktionen eindeutig sind.
-
Ok, dann hat ichs falsch im Kopf
Beim cosinus kommt aber das Gleiche raus, mit 1 und -1, sagt mir jedenfalls mein TR.
-
ja, der kosinus ist eine gerade funktion. deshalb ist er insbesondere nicht injektiv und man muss ihn einschraenken, bevor man in (als funktion) umkehren kann.
-
verdammt das geht alles nich
ich kann die anzahl der berechnungen nicht vermindern
und kann mir einer die "normierte" Formel schreiben
THX
-
beschreib doch mal, wodurch die berechnungen entstehen. du kriegst die anzahl mit sicherheit mindestens logarithmiert und dabei gleichzeitig die einzelnen berechnungen vereinfacht, wenn du irgendwie bounding boxen schachtelst oder so.
es klingt ja so, als haettest du eine riesige tesselierte flaeche und willst nun wissen, welches teildreieck getroffen wird.
-
also das ganze ist recht simpel
ich habe einen editor geschrieben mit dem man eine map aus lauter Polygonen zeichnen kann.zum rendern der map fülle ich ein SDL_Surface mit einer Textur auf einer bestimmten Fläche
nun beginne ich die schleife
zum fertigstellen der map wird nun jedes pixel mapw*maph überprüft ob es in einem der maximal 500 polygonen liegt, wenn das nicht der fall ist setze ich an diese stelle ein pixel (farbe des himmels) zum schluss habe ich ein Surface mit allen Polygonen hübsch gerendert
-
oggs_the_progger schrieb:
also das ganze ist recht simpel
ich habe einen editor geschrieben mit dem man eine map aus lauter Polygonen zeichnen kann.zum rendern der map fülle ich ein SDL_Surface mit einer Textur auf einer bestimmten Fläche
nun beginne ich die schleife
zum fertigstellen der map wird nun jedes pixel mapw*maph überprüft ob es in einem der maximal 500 polygonen liegt, wenn das nicht der fall ist setze ich an diese stelle ein pixel (farbe des himmels) zum schluss habe ich ein Surface mit allen Polygonen hübsch gerendert
naja in jedem fall kannst du die polygone in nem quadtree einordnen dass sollte die laufzeit schon mal deutlich reduzieren.
"mapw*maph" pixel klingt so als wenn du alle pixel die innerhalb des polygons liegen zeichnen würdest. warum lässt du dann nicht einfach dein polygon rendern?