Kann jemand diese Formel vereinfachen ??



  • 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.h

    ax' := 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?



  • irgendwie ist dein konzept falsch...
    erklaer uns mal woher die vektoren a und b kommen und welche auswirkung der winkel zwischen den beiden auf die farbe des pixels hat, den du setzen moechtest.



  • na durch die winkel kann er testen, ob die innenwinkelsumme 180°, der punkt also im dreieck ist.
    aber warum du das pixelweise ueberpruefst ist mir nicht klar. warum renderst du nicht den himmel und davor die polygone? und zwar als polygone und nicht pixelweise.



  • Leudde, die sich nich klar ausdrügg'n könn',
    sollt'n sich nich' in 3D Geometrie versuch'n.

    xyz


Anmelden zum Antworten