Parabelförmige Zwichenkoordinaten
-
Hallo,
http//imageshack.us/photo/my-images/189/parabel.png/
Also ich habe zwei koordinaten, wenn die Distanz zu diesen koordianten größer als 100 ist, sollen zwichen koordinaten eingefügt werden.
wpcalc = distanz /100;
dh wenn die distanz 1000m beträgt sollen 10 koordiaten eingefügt werden ( bzw 8).
das habe ich auch relativ einfach gelöst.
if (wpcalc >100) { wpcalc = wpcalc /100; //MAX DISTANCE =100m for (int i=1; i<wpcalc; ++i) { calcwpx=startX+((i/wpcalc)*(EndX-startX)); calcwpy=startY+((i/wpcalc)*(EndY-startY)); calcwpz=startZ+((i/wpcalc)*(EndZ-startZ));
------------------xyz
Startcords =0,0,0;
Endcords =10,10,10;dh im ersten durchgang wäre X
calcwpx=startX+((i/wpcalc)*(EndX-startX));calcwpx=0+(1/10)*(10-0) / calcwpx =1
2 durchgang
calcwpx=0+(2/10)*(10-0) / calcwpx =2;usw also eine recht simple methode. ich hoffe das war verständlich erklärt.
Leider hatte ich noch nie richtiges mathe und mir fehlen wichtige basics. deshalb weiß ich nicht wie ich eine parabel erstellen soll ( siehe link ).
im prinzip weiß ich nur das die distanz von start zu ende die krümmung bestimmt und das ich die krümmung in der mitte umkehren muss.
ich hoffe ihr könnt mir helfen
danke
-
Wenn Du eine gekrümmte Kurve bekommen willst, so brauchst Du neben Start- und End-Punkt noch eine weitere Information. Eine Möglichkeit wäre, einen weiteren Hilfspunkt einzuführen und die Interpolation (das was Du schon codiert hast) zweimal hintereinander auszuführen.
Mal angenommen Du wählst einen Zwischenpunkt Z(5,5,7). Dann interpolierst Du zunächst zwischen Start und Z und bekommst z.B. P1, dann zwischen Z und End und bekommst P2. Jetzt interpolierst Du noch mal zwischen P1 und P2 und kommst zu calcwp.
Also in Code etwa so:
for (int i=1; i<wpcalc; ++i) { double faktor = double(i)/wpcalc; // 1. Interpolation zwischen Start,Z und End double p1x = startX + faktor*(ZX-startX); // y,z genauso double p2x = ZX + faktor*(EndX-ZX); // y,z genauso // 2. Interpolation zwischen P1 und P2 calcwpx = p1x + faktor*(p2x-p1x); // y,z genauso
Die Kurve ist dann eine Parabel, der Punkt Z liegt zwar außerhalb der Kurve, aber umso mehr Du Z von der direkten Verbindung von Start nach End entfernst, umso mehr krümmst Du die Kurve.
Das ganze ist auch unter Bezier-Kurve bekannt.Tipp: statt jedes mal x,y und z hinzuschreiben, kannst Du auch eine Vektorklasse verwenden.
Gruß
Werner