OK. Es geht so:
Ladet euch den
3-Punkte-Kreis.gsm herunter. In dem ZIP-File ist ein Objekt (.GSM) und 2 Makros (.GDL) enthalten. Bindet zumindest das
Kreis3P.gdl in die aktive Bibliothek mit ein.
Dieses Makro wird vom Skript aus mit den Koordinaten von 3 Kreispunkten aufgerufen. Zurück bekommt man die 2 Koordinaten des Mittelpunktes und den Radius. Übergibt man nach den 6 Koordinaten der Punkte noch eine 1, wird der Radius nicht zurückgegeben.
Unser Prisma sieht dann wie folgt aus (Neues Objekt erstellen und in 3D-Skript kopieren):
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">! Parameter definieren oder nächste Zeile ohne "!"
!
! a=4 : b=2 : zzyzx=1
dim P[38][2] !... Punktespeicher
n=36 !... sollte eine durch 4 teilbare Zahl sein!
! Punktkoordinaten ermitteln
for i=1 to n+2
alpha=i*360/n
x=a*cos(alpha) : y=b*sin(alpha)
hotspot x,y,0
hotspot x,y,zzyzx
P
[1]=x : P[2]=y
next i
! Kreisbögen ermitteln und auf den Stapelspeicher
for i=1 to 36 step 2
! 1.Punkt:
put P[1],P[2],15+64
! Mittelpunkt:
CALL "Kreis3P" P[1],P[2], P[i+1][1],P[i+1][2], P[i+2][1],P[i+2][2], 1
put 900+15+64
! 3.Punkt:
put P[i+2][1],P[i+2][2],3000+15+64
next i
! Prisma zeichnen
prism_ nsp/3,zzyzx,get(nsp)Die Genauigkeit hängt natürlich von der Anzahl der gewählten Segmente (hier: 36 Punkte=18 Segmente) und der Einstellungen unter 'Zauberstabeinstellungen' ab. So weit ich das bis jetzt beurteilen kann ist die Kurve an den Punkten nicht stetig. D.h. daß sie geringe Knicke hat, weil die Kreissegmente nach Punkten und nicht nach Randtangenten bestimmt wurde. Wie gering aber der Fehler ist, kann man in folgendem 2D-Skript sehen:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">! Parameter definieren oder nächste Zeile ohne "!"
!
! a=4 : b=2 : zzyzx=1
! Gestauchte Ellipse als Referenz
mul2 1,B/A
circle2 0,0,A
del 1
! Approximation
pen 7
dim P[38][2]
n=36
for i=1 to n+2
alpha=i*360/n
x=a*cos(alpha) : y=b*sin(alpha)
hotspot2 x,y
P[1]=x : P[2]=y
next i
for i=1 to 36 step 2
CALL "Kreis3P" P[1],P[2], P[i+1][1],P[i+1][2], P[i+2][1],P[i+2][2], 1
poly2_ 3,1,
P[1],P[2],1,
get(2),901,
P[i+2][1],P[i+2][2],3001
next iEchte und Kreisbogenellipse liegen übereinander. Die Abweichung ist gering.
[ 29. September 2004, 14:19: Beitrag editiert von: Frank Beister ]