Autor Beitrag
Visum
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Sa 24.04.04 21:02 
genau ... nur liegt da leider das Problem.

die Punkte werden über Schleifendurchläufe ermittelt:
ausblenden 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 //nicht perfekt, aber eine akzeptable annäherung
     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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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