| |
|
|
p.specht
| Mit el Karthesischen Kegelschnittgleichung a*x² + 2b*x*y + c*y² + 2d*x + 2e*y + f = 0 puede sämtliche Arten de Kegelschnitten (Ellipse, Parabel, Hyperbel) einschließlich aller degenerierten Fälle (Geradenzwickel, Gerade, Punkt oder Garnichts) dargestellt voluntad. In el Astronomie betrifft el zB el Bahnen de Kometen. En ya ermittelten Parametern wäre aber de Interesse, en welchen Typ lo jeweils tatsächlich es y cómo el Bestimmungselemente des Kegelschnittes lauten. Das leistet nachstehendes, de me después de XProfan-11 übersetzes Programa de el genialen Homepage de Prof. J.-P. Moreau - Como siempre sin Gewähr!
Título de la ventana upper$("Aus karthesischer Kegelschnittformel "+\
"auf Parámetro des Kegelschnittes schließen")
Ventana de Estilo 24':Ventana (%maxx-%maxy)/2,0-%maxy,%maxy
font 2:set("decimals",12):randomize
'Q: https://jean-pierre.moreau.pagesperso-orange.fr/Basic/conical_bas.txt
'Transscribed to XProfan 11.2a by P.Pájaro carpintero, Vienna (Austria).
'* Type: Parabola *
'* Center: x=0.999999 y=5.000000 *
'* Symmetry direction: x=1 y=-1 *
'* Foco: x=1.124999 y=4.875000 *
'* Parámetro: 0.35355339 *
'* *
'* Basic version by J-P Moreau. *
'* (www.jpmoreau.fr) *
Declarar c$,a!,b!,c!,d!,e!,f!,x!,y!
Declarar ex!,xc!,yc!,xla!,xlb!,xf1!,yf1!,xf2!,yf2!
Declarar xs1!,ys1!,xs2!,ys2!,xv1!,yv1!,xv2!,yv2!
Declarar delta!,u!,xl!,xm!,x2!,y2!,i&,j&,ityp&,typ&
START:
CLS rgb(200+rnd(56),200+rnd(56),200+rnd(56))
imprimir
imprimir " UMFORMUNG DER KEGELSCHNITTGLEICHUNG AUF ELEMENTARE DARSTELLUNG "
imprimir " ============================================================== \n"
imprimir " Parámetro el Gleichung a*x² + 2b*x*y + c*y² + 2d*x + 2e*y + f = 0 eingeben:\n"
'Testwerte lt. Ejemplo de el Sourcetext:
a!=1:b!=2:c!=1:d!=-13:e!=-11:f!=32
imprimir " Cuestión: Sollen el Werte des internen Testbeispiels uso [j/n]? ";
input c$:c$=left$(lower$(trim$(c$)),1):caso (c$="j") or (c$="y"):goto "Huepf"
imprimir
imprimir " a = ";:input a!
imprimir " 2b = ";:input b!
imprimir " c = ";:input c!
imprimir " 2d = ";:input d!
imprimir " 2e = ";:input e!
imprimir " f = ";:input f!
if (a!=0) and (b!=0) and (c!=0) and (d!=0) and (e!=0) and (f!=0)
beep:imprimir "\n *** Lo fueron no Werte eingegeben! *** "
waitinput 10000
goto "START"
endif
Huepf:
imprimir
b!=b!/2: d!=d!/2: e!=e!/2
delta!=a!*c!-b!*b!
if delta!=0
gosub "S1000"'call Parabola
más
xc!=(b!*e!-d!*c!)/delta!
yc!=(b!*d!-a!*e!)/delta!
f! = f! + a!*xc!*xc!+2*b!*xc!*yc!+c!*yc!*yc!+2*d!*xc!+2*e!*yc!
if f!=0
if delta!>0
ityp&=7'one point
más
ityp&=6'two lines
goto "G100"
endif
endif
u!=sqrt((a!-c!)*(a!-c!)+4*b!*b!)
xl!=(a!+c!-u!)/2: xm!=(a!+c!+u!)/2
if (a!=c!) and (b!=0)
if (f!*a!)>=0
ityp&=8'no conical
goto "G100"
más
ityp&=4'circle
xla!=sqrt(-f!/a!)
ex!=1
goto "G100"
endif
endif
if (a!<c!) and (b!=0)
x2!=1: y2!=0: xv1!=1: yv1!=0
más
xv1!=b!: yv1!=1-a!
u!=sqrt(xv1!*xv1!+yv1!*yv1!)
x2!=xv1!/u!: y2!=yv1!/u!
endif
if delta!<0
gosub "S2000"'call Hyperbola
más
gosub "S3000"'call Ellipse
endif
endif'más if delta=0
' imprimir results
G100:
if ityp&=1
imprimir " Type: Ellipse"
imprimir
imprimir " Mittelpunktkoordianten: x=";format$("%g",xc!);" y=";format$("%g",yc!)
imprimir "\n Richtung Große Achse : x=";format$("%g",xv1!);" y=";format$("%g",yv1!)
imprimir "\n Richtung Kleine Achse : x=";format$("%g",xv2!);" y=";format$("%g",yv2!)
imprimir "\n Longitud Große Halbachse : ";format$("%g",xla!)
imprimir "\n Longitud Kleine Halbachse: ";format$("%g",xlb!)
imprimir "\n Brennpunktkoordinaten : x=";format$("%g",xf1!);" y=";format$("%g",yf1!)
imprimir "\n Zweiter Brennpunkt : x=";format$("%g",xf2!);" y=";format$("%g",yf2!)
imprimir "\n Num.Exzentrizität : ";format$("%g",ex!)
endif
if ityp&=2
if (a!+c!)=0
imprimir " Typ: Gleichseitige Hyperbel"
más
imprimir " Typ: Hyperbel"
endif
imprimir
imprimir " Mittelpunkt : x=";format$("%g",xc!);" y=";format$("%g",yc!)
imprimir "\n Richtung Erste Achse : x=";format$("%g",xv1!);" y=";format$("%g",yv1!)
imprimir "\n Richtung Zweite Achse : x=";format$("%g",xv2!);" y=";format$("%g",yv2!)
imprimir "\n Erste Leitgerade : x=";format$("%g",xs1!);" y=";format$("%g",ys1!)
imprimir "\n Zweite Leitgerade : x=";format$("%g",xs2!);" y=";format$("%g",ys2!)
imprimir "\n Erster Brennpunkt : x=";format$("%g",xf1!);" y=";format$("%g",yf1!)
imprimir "\n Zweiter Brennpunkt : x=";format$("%g",xf2!);" y=";format$("%g",yf2!)
imprimir "\n Num.Exzentrizität : ";format$("%g",ex!)
endif
if ityp&=3
imprimir " Typ: Parabel"
imprimir
imprimir " Mittelpunkt : x=";format$("%g",xc!); " y=";format$("%g",yc!)
imprimir "\n Symmetrieachsenvektor : x=";format$("%g",xv1!);" y=";format$("%g",yv1!)
imprimir "\n Brennpunktskoordinaten: x=";format$("%g",xf1!);" y=";format$("%g",yf1!)
imprimir "\n Parámetro el Parabel : "; format$("%g",ex!)
endif
if ityp&=4
imprimir " Typ: Kreis"
imprimir
imprimir " Mittelpunkt : x=";format$("%g",xc!);" y=";format$("%g",yc!)
imprimir "\n Radius : ";format$("%g",xla!)
imprimir "\n Num.Exzentrizität : ";format$("%g",ex!)
endif
caso ityp&=5: imprimir " Dieser Kegelschnitt degeneriert a Linie."
caso ityp&=6: imprimir " Dieser Kegelschnitt degeneriert a zwei Geraden."
caso ityp&=7: imprimir " Dieser Kegelschnitt degeneriert a una individual Punkt."
caso ityp&=8: imprimir " Reell no lösbar. Kein Kegelschnitt!"
imprimir
Waitinput
Imprimir "\n Noch una Ejemplo durchrechnen [n,e = Ende]? ";
input c$:c$=left$(lower$(trim$(c$)),1)
casenot (c$="n") or (c$="e"):Goto "START"
beep:Imprimir "\n Programa final.\n\n Auf Wiedersehen!"
Waitinput 3000
FIN'of main program
'Subroutine Parabel
S1000:
ityp&=3
if (c!=0) and (a!=0)'The parabola does not exist or is degenerated into a line
if (d!=0) and (e!=0)
typ&=8'no conical
más
typ&=5'line
volver
endif
endif
if (a!=0)
x2!=1: y2!=0: xl!=0: xm!=1
más
if a!<0
f!=-f!: e!=-e!: d!=-d!
c!=-c!: b!=-b!: a!=-a!
endif
xl!=sqrt(a!): xm!=sqrt(c!)
caso b!<0 : xm!=-xm!
u!=sqrt(a!+c!)
x2!=xm!/u!: y2!=-xl!/u!
f!=f!*u!:c!=(a!+c!)*u!
u!=d!*xm!-e!*xl!: e!=d!*xl!+e!*xm!: d!=u!
endif
if d!=0
if sqr(e!)<(c!*f!)
typ&=8
más
typ&=6'two lines
volver
endif
más
x!=(e!*e!-c!*f!)/2/c!/d! : y!=-e!/c!
xc!=x!*x2!-y!*y2! : yc!=y!*x2!+x!*y2!
ex!=-d!/c!
xf1!=xc!+ex!*x2!/2 :yf1!=yc!+ex!*y2!/2
xv1!=xm! : yv1!=-xl!
endif
volver
'Subroutine Hyperbel
S2000:
ityp&=2
xla!=sqrt(-abs(f!)/xl!): xlb!=sqrt(abs(f!)/xm!)
if f!<0
u!=xla!: xla!=xlb!: xlb!=u!
u!=x2!: x2!=-y2!: y2!=u!
u!=xv1!: xv1!=-yv1!: yv1!=u!
endif
xv2!=-yv1!: yv2!=xv1!
u!=sqrt(xla!*xla!+xlb!*xlb!)
xs1!=xc!+x2!*xla!: ys1!=yc!+y2!*xla!
xs2!=xc!-x2!*xla!: ys2!=yc!-y2!*xla!
xf1!=xc!+x2!*u!: yf1!=yc!+y2!*u!
xf2!=xc!-x2!*u!: yf2!=yc!-y2!*u!
ex!=u!/xla!
volver
'Subroutine Ellipse
S3000:
ityp&=1
if (f!*xl!)>0
typ&=8'no conical
volver
endif
xla!=sqrt(-f!/xl!): xlb!=sqrt(-f!/xm!)
if xl!<0
u!=xla!: xla!=xlb!: xlb!=u!
u!=x2!: x2!=-y2!: y2!=u!
u!=xv1!: xv1!=-yv1!: yv1!=u!
endif
xv2!=-yv1!: yv2!=xv1!
u!=sqrt(xla!*xla!-xlb!*xlb!)
xf1!=xc!+x2!*u!: yf1!=yc!+y2!*u!
xf2!=xc!-x2!*u!: yf2!=yc!-y2!*u!
ex!=u!/xla!
volver
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 19.05.2021 ▲ |
|
|
|