| Autor |
Beitrag |
Visum
      
Beiträge: 106
|
Verfasst: Sa 24.04.04 10:00
Hi,
der ein oder andere kennt vielleicht die (oder eine) mathematische Formel, die ein Herz im dreidimensionalen Raum beschreibt.
Ich möchte eine solche Formel zeichnen, genauer gesagt diese Formel:
2x²+y²+z²-1)³-1/10*x²z³-y²z³ = 0
Da ich es nicht geschafft habe diese Formel nach irgendeiner Variablen umzuformen hab ich es bisher einfach per "zufall" berechnen lassen (sprich ich gehe per schleife ein "paar" zahlen durch und gucke, ob sie passen). Anschließend speichere ich die Punkte und zeichne sie mittels openGl. Das speichern der Punkte sieht so aus, dass ich 3 Arrays benutze (jeweils eins für die x-, die y- und die z-koordinaten). Ausserdem berechne ich nur ein viertel des Herzens, da der Rest per Spiegelung (an zwei ebenen) gezeichnet werden kann.
Eigentlich funktioniert das bisher ganz gut, aber es kommt nicht wirklich ein Körper heraus, sondern eher ein Punkte-Herz.
Deshalb die Frage: Hat jemand eine Idee, wie ich aus diesen gespeicherten Punkten eine Fläche erzeuge?
oder hat jemand eine bessere Methode zum zeichnen (wo evtl. dann auch eine Figur mit Oberfläche ensteht)?
Meinen bisherigen Code bzw. das Programm kann ich auf Anfrage gerne verschicken
Gruß v!sum
_________________ Was blubbert kommt in den Teich!
|
|
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Sa 24.04.04 18:50
solche Terme kann man durchaus nach einer variablen auflösen, jedoch werden sie dann mehrdeutig, d.h. es werden +- konstrukte entstehen, ich versuch mal das ding auzulösen.....
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Sa 24.04.04 19:01
war mir doch zu viel Arbeit es von Hand zu machen, so hab ich Maple befragt:
www.transweb-cj.de/k...test/maple/html.html
die einzelenen Lösungen sind durch Kommas voneinander getrennt und ich hab den Term nach x, y, und z aufgelöst.
Wenn du diese Terme verwendest hasst du die Punkte schonmal in einer halbwegs vernünftigen Reihenfolge für das spätere Zeichnen, einfach 2 Werte wandern lassen
MathiasH
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Sa 24.04.04 19:06
Wenn du mit OpenGL nur Punkte zeichnen lässt, kriegst du auch nur Punkte
Du kannst:
a) so viele Punkte ermitteln, daß die Punkte sich augenscheinlich zu einer Fläche verbinden, also gaaanz viele Punkte nebeneinander
b) die Punkte als Ecken von Polygonen nehmen und die Polygone mit einer Farbe oder Textur versehen, dann brauchst du nicht so viele Punkte ermitteln
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Sa 24.04.04 19:10
das problem bei seiner bisherigen Methode war allerdings so wie ich es gelesen habe, die Punkte in eine sinnvolle reihenfolge zu bringen. Wenn sie jedoch nun der Reihe nach berechnet werte besteht dieses Problem garnicht
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Sa 24.04.04 19:45
Also aufgrund dieser Frage:
| Visum hat folgendes geschrieben: | | Deshalb die Frage: Hat jemand eine Idee, wie ich aus diesen gespeicherten Punkten eine Fläche erzeuge? |
Vermute ich einfach mal, daß er das Herz nur als Körper haben will und nicht als einzelne Punkte im Raum. Und damit er das kriegt, muss er einfach die Punkte mit einer Fläche verbinden.
Was du da von Reihenfolge gelesen hast, weiß ich nicht 
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Sa 24.04.04 19:46
schau dir mal an wie er sie berechnet, praktisch nach dem Zufallsprinzip, folglich sind sie planlos über den Körper verteilt um da sinnvoll dreiecke reinlegen zu können müsste man sie erst sortieren, oder gleich vernünftig ausrechnen
für das eigentliche zeichnen muss er dann einfach glBegin(GL_TRIANGLES)
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Sa 24.04.04 20:46
Stimmt schon, daß eine Ermittlung der Punkte mittels dazugehöriger Funktionen wirklich sinnvoller wäre als eine rein zufällige.
Aber grundsätzlich wird er auch über deine Funktionen das Problem haben, daß er nur Punkte rauskriegt, und mit Verbinden der Pnkte durch Flächen stellt man das ab. Und grundsätzlich klappt dies auch mit seiner Methode, wenn er weiß welchen Punkt er mit welchen anderen beiden zu einem Dreieck verbinden muss.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
Visum 
      
Beiträge: 106
|
Verfasst: Sa 24.04.04 21:02
genau ... nur liegt da leider das Problem.
die Punkte werden über Schleifendurchläufe ermittelt: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure berechnepunkte; var ergebnis:real; x,y,z:integer; begin
anzein:=0;
for x:=0 to temp do begin for y:=0 to temp do begin for z:=(-1*temp) to temp do begin ergebnis:=herz(x/genauigkeit,y/genauigkeit,z/genauigkeit); if (ergebnis<abweichung) and (ergebnis>(-1*abweichung)) then begin if anzein<1000000 then begin points_x[anzein]:=x/genauigkeit; points_y[anzein]:=y/genauigkeit; points_z[anzein]:=z/genauigkeit; anzein:=anzein+1; end; end; end; end; end; | Ich hab die Punkte also in gewisser Weise geordnet. Problem ist hier nicht die Geschwindigkeit oder der Sinn, denn es funktioniert (soweit).
Aber wie soll ich sie ordnen, dass ich weiß, welche Punkte ich zu einem Dreieck verbinden muss?
nachtrag: danke für die berechnungen mit maple, allerdings enthalten alle formeln auf der seite sowohl x, y, und z - es wurde also nicht wirklich nach einer variable aufgelöst ...
_________________ Was blubbert kommt in den Teich!
|
|
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: So 25.04.04 00:39
verdammt, hast recht, da ist überall noch was drinnen geblieben
muss ich nal schaun, bei maple gibt es einige solve funktionen, vielleicht geht es mit einer anderen....
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
|