ZitatP.S.: Meine Methode "Lernen durch Blödsinn schreiben und von kompetenter Stelle korrigiert werden" hat sich wieder einmal bewährt
Genial!!
ZitatP.S.: Meine Methode "Lernen durch Blödsinn schreiben und von kompetenter Stelle korrigiert werden" hat sich wieder einmal bewährt
Genial!!
Abt. Einige mathematische Konstanten für XProfan (auf zukunftssichere Stellenzahl )
================================
' Einige Mathematische Konstanten, Versionsstand 2014-03-14,23:30
Def !Pi 3.1415926535897932384626433832795
Def !Pi2 6.2831853071795864769252867665581
Def !Pih 1.5707963267948966192313216916398
Def !PiDiv180 0.01745329251994329576923690768489
Def !Div180Pi 57.295779513082320876798154814105
Def !Euler 2.7182818284590452353602874713527
Def !Root2 1.4142135623730950488016887242097
Def !Root3 1.7320508075688772935274463415059
Def !RootPi 1.7724538509055160272981674833411
Def !Root5 2.2360679774997896964091736687313
Def !GoldenRatio 1.6180339887498948482045868343656
Def !Ln10 2.3025850929940456840179914546844
Def !Ln2 0.69314718055994530941723212145818
Def !Lb10 3.3219280948873623478703194294894
Def !LbE 3.921651713656448480581438480269
Def !LbE 1.4426950408889634073599246810019
Def !Log2 0.30102999566398119521373889472449
Def !LogE 0.43429448190325182765112891891661
Def !EulerMasc 0.5772156649015328606065120900824024310
Def !Lemniskat 2.62205755429211981046
Def !Sirpinski 2.58498175957925321706
Def !PrimZwill 0.66016181584686957392
Def !SumRezipPrimZwill 1.902160583209
Def !Feigbm1 4.66920160910299067185
Def !Feigbm2 2.50290787509589282228
Def !Fibon 0.29762917531599816807398825978458
Def !RezipFibon 3.3598856662431775531720113029189
Def !ErdGrav 9.80665
Def !Div60 0.01666666666666666666666666666667
Def !Div360 0.00277777777777777777777777777778
Def !Div3600 0.000277777777777777777777777777778
Def !Div24 0.04166666666666666666666666666667
Def !DivPi 0.31830988618379067153776752674503
Def !SecPerDay 86400
Def !DayPerSec 0.00011574074074074074074074074074074
Def !Div1a 0.999999999999999999999999999999
Def !Div2a 0.444444444444444444444444444444
Def !Div2 0.5
Def !Div3 0.33333333333333333333333333333333
Def !Div4 0.25
Def !Div5 0.2
Def !Div6 0.16666666666666666666666666666667
Def !Div7 0.14285714285714285714285714285714
Def !Div8 0.125
Def !Div9 0.11111111111111111111111111111111
Def !Div10 0.1
Def !Div11 0.09090909090909090909090909090909
Def !Div12 0.08333333333333333333333333333333
Def !Div13 0.07692307692307692307692307692308
Def !Div14 0.07142857142857142857142857142857
Def !Div15 0.06666666666666666666666666666667
Def !Div16 0.0625
Def !Div17 0.05882352941176470588235294117647
Def !Div18 0.05555555555555555555555555555556
Def !Div19 0.05263157894736842105263157894737
Def !Div20 0.05
Def !DivHdt 0.01
Def !DivTsd 0.001
Def !DivZTsd 0.0001
Def !DivHTsd 0.00001
Def !DivMio 0.000001
Def !DivMrd 0.000000001
Cls
set("Decimals",17)
print " Goldener Schnitt = ";!GoldenRatio
waitinput
Alles anzeigen
Korrektur zu oben: Falsche Zeile >Def !LbE 1.4426950408889634073599246810019
soll richtig heissen> Def !LLE 1.4426950408889634073599246810019
Sorry!
P.S.: Die Konstante wird in mehreren a-hoch-b-Funktion pow(a,b) verwendet, siehe Code Twiddelig - pow(a,b). Insbesondere für a!=!Euler, also die Exp()-Funktion, existieren noch schnellere Formeln, siehe Schraudolph99.pdf.
Abt. Gravi-Spirograph
==============
zum rumspielen. Man denke sich ein Gewicht an einer Schnur, die durch ein Loch in einer senkrechten Platte zu einem etwas schwereren Gegengewicht führt. Etwas hochtrabend erklärt: Die entstehende Figur ist vom Startort, der Anfangsgeschwindigkeit (in x- und in y-Richtung) sowie von der Reibung an der Platte plus der Reibung der Schnur im Loch abhängig.
Gruss
P.S.: Zum Beenden etwas länger die ESC drücken!
WindowTitle "Gravi-Spirograph" '(CL) CopyLeft 2014-03 by P.Specht, Wien
Windowstyle 24:Font 2:Randomize:Window 0,0-%maxx,%maxy-40
var xx&=width(%hwnd):var yy&=height(%hwnd):var xh&=xx&\2:var yh&=yy&*0.2 'Nullpunktshöhe
set("decimals",15):set("numwidth",30):var g2r!=Pi()/180:var ende&=0
proc point :parameters x!,y!
usepen 0,1,0:line xh&,0 - xh&,yy&:line 0,yh&-xx&,yh&
usepen 0,24,rgb(100+rnd(156),100+rnd(156),100+0*rnd(156))
line xh&+x!,(yh&-y!) - xh&+x!+1,yh&-y!-1
endproc
declare x!,y!,d!,a!,ax!,ay!,vx!,vy!,t!,g!
g!=9.80665 ' Erdbeschleunigung in -y Richtung
t!=0.1 ' = 1/FPS Simulierter Zeitschritt, 1/FPS = "Echtzeit"
'x!=200:y!=0:vy!=10:vx!=0 'Startpunkt und Initialgeschwindigkeit y=Nach obeb
'x!=200:y!=-100:vy!=8
x!=500:y!=-100:vy!=rnd(12)
repeat
d!=sqrt(sqr(x!)+sqr(y!))
if d!>1
a!=d!*0.0001 ' Zentripetalbeschleunigung, hier vom Abstand linear abhängig
ax!=-x!/d!
ay!=-g!/17-y!/d!
vx!=vx!+ax!/2*t!
vx!=vx!*(1-0.002*t!) ' Dämpfung der x-Komponente (2%/sek)
vy!=vy!+ay!/2*t!
vy!=vy!*(1-0.002*t!) 'Dämpfung der y-Komponente
x!=x!+vx!*t!
y!=y!+vy!*t!
point x!,y!
endif
if rnd()<0.01:waitinput 5:case %key=27:ende&=1:endif
until ende&
end
Alles anzeigen
PPS: Auch lustig: Der Simulationsfehler, der bei Wahl zu großer Zeitschritte entsteht, z.B t!=10 statt 0.01
Abt. Maus-Fans
==========
Der Fan-Kult um mache Stars nimmt bekanntlich manchmal irre Formen an. Hier sehen wir die Fans eurer Computermaus. Einfach mal ausprobieren
WindowTitle "Die Verehrung der Maus":windowStyle 24:Window 0,0-%maxx,%maxy-40
var xx&=width(%hwnd):var yy&=height(%hwnd):var xh&=xx&*0.5:var yh&=yy&*0.5:var ende&=0
proc ArcTan4 :parameters x!,y!:var pi!=3.1415926535897932:var w!=0 '(CL)2014-01 P.Specht
if x!=0:if y!>0:w!=pi!*0.5:elseif y!<0:w!=pi!*1.5:else :w!=0:endif :return w!:elseif x!>0
if y!=0:w!=0:return w!:elseif y!>0:if x!>y!:w!=arctan(y!/x!):else :w!=pi!/2-arctan(x!/y!):endif
return w!:else :if x!<-y!:w!=pi!*1.5+arctan(x!/-y!):else :w!=2*pi!-arctan(-y!/x!):endif :return w!
endif :else :if y!>0:if x!>-y!:w!=pi!/2+arctan(-x!/y!):return w!:else :w!=pi!-arctan(y!/-x!)
return w!:endif :elseif y!<0:if x!<y!:w!=pi!+arctan(-y!/-x!):else :w!=pi!*1.5-arctan(-x!/-y!)
endif :return w!:else :w!=pi!:return w!:endif :endif :Print " ArcTan4 ERROR":waitinput:waitinput
endproc
declare i&,j&,k&,w!,L!,LL! : L!=40 : LL!=L!*0.9
Repeat
MCLS xx&,yy&,$FFFFFF : startpaint -1
WhileLoop 36:i&=LL!*&Loop:WhileLoop 18:j&=LL!*&Loop
usepen 0,7,255:line i&,j& - i&+1,j&
w!=arctan4(%mousex-i&,%mousey-j&)
usepen 0,2,0:line i&,j& - i&+L!*cos(w!),j&-L!*sin(-w!)
endwhile :endwhile : EndPaint
MCopyBMP 0,0 - xx&,yy& > 0,0;0
Until ende&
Alles anzeigen
Abt. Geburtstagserinnerer
================
Meine Link-Empfehlung: GEBURTSTAGSERINNER (Freeware) mit zahlreichen Import- und Export-Features.
Nie wieder einen Geburtstag vergessen! Sehr übersichtlich!
Gruss
P.S.: Was jetzt noch fehlt ist ein Sterbtage-Erinnerer, ein Hochzeitstag-Erinnerer, ein Jahrestage-Erinnerer und ein Namenstag-Anzeiger sowie ein Klassentreffen-Erinnerer, ein Arzttermin-Erinnerer sowie ein Eisprungerinnerer, ein Prostatavorsorgeuntersuchungserinnerer, eventuell auch ein Reise-Impfterminerinnerer und Langfrist-Auffrischungsimpfungserinnerer, ein Erdgasabdreh- und Bügeleisenaussteck-Erinnerer als Plugin für Reiseplaner sowie ein Haftentlassungserinnerer und ein Abrüstungstagcountdownzähler für Wehrdiener. Und natürlich ein Verwantenbesuchslichtrechzeitigabdrehunduntertaucherinnerer. Oder so ähnlich...
Gibts doch alles schon, sogar AllInOne, nennt sich Terminkalender
Gruß Volkmar
Verwantenbesuchslichtrechzeitigabdrehunduntertaucherinnerer auch?
Verwantenbesuchslichtrechzeitigabdrehunduntertaucherinnerer nicht, in der deutschen Version nur Verwandtenbesuchslichtrechzeitigabdrehunduntertaucherinnerer
Gruß Volkmar
Ah, drum seh' ich die nie! Nicht eine einzige Tandte lässt sich blicken...
Abt. Einfaches gedämpftes Pendel
=====================
Man möchte gar nicht meinen, daß eine einfache, dynamisch der Realität nahekommende Pendel-Simulation schwerer zu programmierren ist als diverse Funprogramme wie z.B. Spirographen und dergleichen. Ganz überzeugend ist das untenstehende Machwerk noch nicht.
Gruss
P.S.: Bitte z.B. das Fenster nur kurz zu bewegen, sonst läuft die FramesPerSecond-Messzeit zu stark auf...
PPS: Vorsicht, das Ding frisst Ressourcen und hat ein Speicherleck... Abhilfe?
windowtitle "Einfaches Pendel"
'(CL) 2014-3 by P.Specht, Wien. Keine wie auch immer geartete Gewähr!
windowstyle 24:window 0,0-%maxx,%maxy-40:randomize:font 2
declare xx&,yy&,xh!,yh!,zoom!:xx&=width(%hwnd):yy&=height(%hwnd)
declare r!,gamma!,x!,y!,xn!,yn!,xd!,yd!,alpha!,beta!,delta!,omega!,t!,g!,a!,daempfg!,tm&
xh!=0.5*xx&:yh!=0.25*yy& ' Koordinatenursprung
zoom!=4000 'zur Pixelanpassung der Pendellänge [m]
xd!=0:yd!=0 'Pendelaufhängepunkt [Pixel]
g!=9.80665 'Erdbeschleunigung [m/s²]
r!=0.01*12'cm 'Pendellänge [m]
gamma!=Pi()/180*120.22' [Grad] Auslenkung beim Start
daempfg!=.001*2'Promille Dämpfung
t!=0.013 's 'Zeitschritt. Für Echtzeit: 1/FPS
Repeat
tm&=&gettickcount
MCls %maxx,%maxy,$FFFFFF
StartPaint -1
usepen 0,1,0:line xh!,0 - xh!,yy& : line 0,yh! - xx&,yh!
usepen 0,1,255:line xh!+xd!,(yh!-yd!) - xh!+xd!+x!,yh!-yd!-y!
usepen 0,24,rnd(136)+120:line xh!+xd!+x!,(yh!-yd!-y!-1) - xh!+xd!+x!,yh!-yd!-y!
EndPaint
MCopyBMP 0, 0 - %maxx,%maxy > 0, 0; 0
a!=g!*sin(-gamma!)*t!
omega!=omega!-a!/r!
omega!=omega!*(1-daempfg!)
gamma!=gamma!-omega!*t!
x!=-r!*sin(gamma!)*zoom!
y!=-r!*cos(gamma!)*zoom!
if rnd()<0.03:windowtitle str$(int(1/t!)):waitinput 5:endif
t!=(&gettickcount-tm&)*0.0007 ' eigentlich 0.001
until %key=27
End
Alles anzeigen
MCLS aus der Repeatschleife rausnehmen und nur einmal vor Eintritt das Bild erzeugen, in der Schleife vor dem Malen mit CLS leeren. Danach bleibts schön ruhig beim Ressourcenverbrauch.
windowtitle "Einfaches Pendel"
'(CL) 2014-3 by P.Specht, Wien. Keine wie auch immer geartete Gewähr!
windowstyle 24:window 200,0-%maxx,%maxy-40:randomize:font 2
declare xx&,yy&,xh!,yh!,zoom!:xx&=width(%hwnd):yy&=height(%hwnd)
declare r!,gamma!,x!,y!,xn!,yn!,xd!,yd!,alpha!,beta!,delta!,omega!,t!,g!,a!,daempfg!,tm&
xh!=0.5*xx&:yh!=0.25*yy& ' Koordinatenursprung
zoom!=4000 'zur Pixelanpassung der Pendellänge [m]
xd!=0:yd!=0 'Pendelaufhängepunkt [Pixel]
g!=9.80665 'Erdbeschleunigung [m/s²]
r!=0.01*12'cm 'Pendellänge [m]
gamma!=Pi()/180*120.22' [Grad] Auslenkung beim Start
daempfg!=.001*2'Promille Dämpfung
t!=0.013 's 'Zeitschritt. Für Echtzeit: 1/FPS
MCls %maxx,%maxy,$FFFFFF
Repeat
tm&=&gettickcount
'MCls %maxx,%maxy,$FFFFFF
StartPaint -1
CLS $FFFFFF
usepen 0,1,0:line xh!,0 - xh!,yy& : line 0,yh! - xx&,yh!
usepen 0,1,255:line xh!+xd!,(yh!-yd!) - xh!+xd!+x!,yh!-yd!-y!
usepen 0,24,rnd(136)+120:line xh!+xd!+x!,(yh!-yd!-y!-1) - xh!+xd!+x!,yh!-yd!-y!
EndPaint
MCopyBMP 0, 0 - %maxx,%maxy > 0, 0; 0
a!=g!*sin(-gamma!)*t!
omega!=omega!-a!/r!
omega!=omega!*(1-daempfg!)
gamma!=gamma!-omega!*t!
x!=-r!*sin(gamma!)*zoom!
y!=-r!*cos(gamma!)*zoom!
if rnd()<0.03:windowtitle str$(int(1/t!)):waitinput 5:endif
t!=(&gettickcount-tm&)*0.0007 ' eigentlich 0.001
until %key=27
End
Alles anzeigen
Gruß Volkmar
Das war's also! Danke Volkmar!
Besten Gruss
@Jörg: Du mußt ja einen teuflisch schnellen Rechner haben, wenn t! = 0 ms rauskommt! Damit habe ich natürlich nicht gerechnet...
Abt. Gedämpftes Pendel die Zweite
======================
... nun auch mit Seitenriss und Viewpoint (blau eingezeichnet) für Halb-perspektivische Darstellung. Warum muß ich bloß die ganze Zeit an gedämpfte Nudeln mit Zwetschkenmus (D: Pflaumenmarmelade) denken?
windowtitle "Gedämpftes Pendel im Auf- und Seitenriss [Ende: ESC halten]"
'(CL) 2014-3 by P.Specht, Wien. Keine wie auch immer geartete Gewähr!
windowstyle 24:window 0,0-%maxx,%maxy-40:randomize:font 2
declare xx&,yy&,xh!,yh!,zoom! : xx&=width(%hwnd) : yy&=height(%hwnd)
declare xd!,yd!,r!,gamma!,x!,y!,omega!,t!,g!,a!,daempfg!,tm&
declare xs!,ys!,xv!,yv!,dist!
xh!=0.6666*xx&:yh!=0.4*yy& 'Koordinatenursprung
zoom!=4000 'Pixelmaßstab der Pendellänge [m]
xd!=-0.5*xh!:yd!=0 'Pendelaufhängepunkt [Pixel]
xs!=(xx&-xh!)/2:ys!=0 'Aufhängung im Seitenriss
xv!=xd!:yv!=-200 'Viewpoint (bestimmt Größe im Seitenriss)
g!=9.80665 'Erdbeschleunigung [m/s²]
r!=0.01*8'cm 'Pendellänge [m]
gamma!=Pi()/180*180.02 ' [Grad] Auslenkung beim Start
daempfg!=.001*0.8 'Promille Dämpfung
t!=0.013 's 'Zeitschritt. Für Echtzeit 1 / Fps
omega!=2*pi()/60* -200 'Start-Drehzahl [U/min,'-' = im Uhrzeigersinn]
MCls %maxx,%maxy
Repeat
tm&=&gettickcount
StartPaint -1
CLS
usepen 0,1,0:line xh!,0 - xh!,yy& : line 0,yh! - xx&,yh!
'Aufriss:
usepen 0,5,255:line xh!+xd!,(yh!-yd!) - xh!+xd!+x!,yh!-yd!-y!
usepen 0,53,200:line xh!+xd!+x!,(yh!-yd!-y!-1) - xh!+xd!+x!,yh!-yd!-y!
'Seitenriß:
dist!=sqrt(sqr(x!-xv!)+sqr(y!-yv!))
usepen 0,5,255:line xh!+xs!,(yh!-ys!) - xh!+xs!,yh!-ys!-y!
usepen 0,53*r!*zoom!/dist!,200:line xh!+xs!,(yh!-ys!-y!-1) - xh!+xs!,yh!-ys!-y!
' Viewpoint
usepen 0,25,rgb(0,0,200)
line 15,(yh!-yv!-1) - 15,yh!-yv!
EndPaint
MCopyBMP 0,0 - %maxx,%maxy > 0,0;0
a!=g!*sin(-gamma!)*t!
omega!=omega!-a!/r!
omega!=omega!*(1-daempfg!)
gamma!=gamma!-omega!*t!
x!=-r!*sin(gamma!)*zoom!
y!=-r!*cos(gamma!)*zoom!
if rnd()<0.04:waitinput 5:endif
t!=(&gettickcount-tm&)*0.0005
until %key=27
End
Alles anzeigen
Abt. Einfaches Federpendel
=================
Mausklick setzt Startposition!
Gruss
Windowtitle "Einfaches Federpendel"
'(CL) 2014-3 by P.Specht, Wien. Keine wie auch immer geartete Gewähr!
Windowstyle 24:window %maxx-200,0 - 200,%maxy-40
declare xx&,yy&,xh!,yh!,zoom!:xx&=width(%hwnd):yy&=height(%hwnd)
declare r!,x!,y!,xn!,yn!,xd!,yd!,ax!,ay!,vx!,vy!,t!,g!,a!,daempfg!,tm&,m!,fc!
xh!=0.5*xx&:yh!=0.2*yy& ' Koordinatenursprung
zoom!=1500 'zur Pixelanpassung der Pendellänge [m]
xd!=0:yd!=0 'Pendelaufhängepunkt [Pixel]
g!=9.80665 'Erdbeschleunigung [m/s²]
r!=.01*5 '=cm 'Federlänge bei Null-G in [m]
daempfg!=.001*0.75 'Promille Dämpfung
t!=0.008 'Zeitschritt [s]. Für Echtzeit: 1/FPS
fc!=200 'Federkonstante N/m
m!=2 'kg Masse
y!=-r! 'Null-G-Position der Federmasse
x!=0 'mittig
vy!=1 'm/s
MCls %maxx,%maxy
Repeat :StartPaint -1:ClS
usepen 0,1,0:line xh!,0 - xh!,yy& : line 0,yh! - xx&,yh!
usepen 0,5,255:line xh!+xd!,(yh!-yd!) - xh!+xd!+x!*zoom!,yh!-yd!-y!*zoom!
usepen 0,47,200:line xh!+xd!+x!*zoom!,(yh!-yd!-y!*zoom!-1) - xh!+xd!+x!*zoom!,yh!-yd!-y!*zoom!
EndPaint : MCopyBMP 0,0-%maxx,%maxy > 0,0;0
ay!=(abs(y!)-r!)*fc!/m! - g!
vy!=vy!+0.5*ay!*t!
vy!=vy!*(1-0.001)
y!=y!+vy!*t!
waitinput 4
if %MousePressed
ay!=0:vy!=0:y!=(yh!-%mousey)/zoom!
endif
until %key=27
End
Alles anzeigen
Abt. Unvorstellbare Beweise
==================
Ernsthafte Behauptung: Die Summe aller natürlichen Zahlen ist Minus-Ein-Zwölftel,
bzw. mathematisch: S = 1 + 2 + 3 + 4 + 5 + ... = -1/12. Beweis nachstehend!
Gruss
P.S.: Diese Art der Summenbildung liefert z.B. in der Stringtheorie tatsächlich die richtigen Ergebnisse!
ZitatAlles anzeigen(Vorbeweis I): Sei K = 1 - 1 + 1 - 1 + 1 - 1 + 1 - 1 + 1 - 1 + 1 - ...
Dann gilt:
1-K = 1-(1-1+1-1+1-1+1-1+1-1+1-1+...) =
= 1- 1+1-1+1-1+1-1+1-1+1-1+... = K (...Schau an! :idea: )
1-K = K <=> 1=K+K <=> 1=2*K <=> K =1/2
K = 1 - 1 + 1 - 1 + .. = 1/2 (...Vorbeweis I erbracht!)Vorbeweis II: Sei G = 1 - 2 + 3 - 4 + 5 - 6 + ... Inf
Dann kann man z.B. G kopieren und zu sich selbst,
um 1 Stelle rechtsversetzt, addieren (warum auch nicht):
G = 1 - 2 + 3 - 4 + 5 - 6 + 7 ...
G =___1 - 2 + 3 - 4 + 5 - 6 ...
--------------------------------------------
= 1 - 1 + 1 - 1 + ... = K (Schau schau!)
Wir wissen inzwischen: G+G = K und K = 1/2. Daher ist die
Pseudosumme von G = K/2 = 1/4 (Vorbeweis II erbracht)Zum Beweis unserer obigen Behauptung subtrahieren wir nun
G von S, indem wir -G zu S addieren:
-G = -[1 - 2 + 3 - 4 + 5 - 6 + ... + Inf = -1/4-G = -1 + 2 - 3 + 4 - 5 + 6 - ... - Inf = -1/4
+S = 1 + 2 + 3 + 4 + 5 + 6 + ... + Inf
--------------------------------------------------------
Sum = 0 + 4 + 0 + 8 + 0 + 12 + ... =
= 4*( 1 + 2 + 3 + ...) = 4*SMit anderen Worten:
-G + S = 4*S
und wir wissen ja:
G = 1/4
Durch Einsetzen erhalten wir:
-1/4 + S = 4*S
-1/4 = 3*S
bzw.
S = -1/4 *1/3
S = 1+2+3+4+5+6+...+Inf = -1/12 (q.e.d.)
PPS.: Beweis erbracht! Allerdings schon von Prof.Dr.mult. Leonard Euler, in Göttingen um etwa 1736...
Abt. Drehfederpendel
==============
Drehpendel eignen sich z.B. dazu, unbekannte Trägheitsmomente von Körpern (bezüglich bestimmter Drehachsen) durch Schwingungszeit-Vergleiche mit einem Körper mit bekanntem (oder leicht berechenbarem) Trägheitsmoment zu ermitteln:
ZitatJ_Neu = J_bekannt * T_bekannt ² / (T_Neu ² - T_bekannt ²)
Das folgende Teil soll einfach gewisse Abhängigkeiten von Massen und Radien aufzeigen. Allerdings wurde zugunsten der Action auf physikalische Korrektheit diesmal ein bisschen verzichtet.
Gruss
WindowTitle "Drehpendel":font 2:randomize
'(CL)CopyLeft 2013-03 by P. Specht, Wien.
' Keine wie auch immer geartete Gewähr!
Windowstyle 24:Window 0,0-%maxx,%maxy-40
var xx&=width(%hwnd):var yy&=height(%hwnd)
var xh!=xx&/2:var yh!=yy&/2
declare xd!,yd!,x!,y!,a!,g!,alpha!,omega!,t!,gamma!
declare grad!,d!,masse!,phase!,cm!,ms!,L!,zoom!,daempf!,dir!
zoom!=3000:cm!=0.01:ms!=0.001:grad!=pi()/180
x!=L! : y!=0 'Startposition
masse!=50 'kg Gesamtmasse
L!=8*cm!
t!=10*ms!
D!=-5.80665 'rad/s² ... Federkonstante
daempf!=0.0077
phase!=42*grad! ' Nullpunkt-Richtungsjustierung
gamma!=5*360*grad! 'Startwinkel (Federaufzug)
dir!=-1
MCls xx&,yy&
Repeat
StartPaint -1:ClS
print x!,y!
usepen 0,1,0:line xh!,0 - xh!,yy&:line 0,yh! - xx&,yh!
usepen 0,5,255: line xh!+xd!*zoom!,(yh!-yd!*zoom!) - (xh!+x!*zoom!),yh!-y!*zoom!
usepen 0,5,$9F00: line xh!+xd!*zoom!,(yh!-yd!*zoom!) - (xh!-x!*zoom!),yh!+y!*zoom!
usepen 0,47,200:line xh!+x!*zoom!,(yh!-y!*zoom!-1) - xh!+x!*zoom!,yh!-y!*zoom!
usepen 0,47,$9F00:line xh!-x!*zoom!,(yh!+y!*zoom!-1) - xh!-x!*zoom!,yh!+y!*zoom!
EndPaint
MCopyBMP 0,0-xx&,yy& > 0,0;0
alpha!= -D!*gamma!/(sqr(L!)*masse!)
omega!=omega!+alpha!/2*t!
omega!=omega!*(1-daempf!)-daempf!
gamma!=gamma!-omega!*t! +0.5 'Versuch, die Sache zu beleben (unphysikalisch)
x!=xd!+L!*cos(gamma!+phase!)
y!=yd!+L!*sin(gamma!+phase!)
L!=L!+dir!*0.02*cm!
case L!<1*cm!:dir!=1
case L!>9*cm!:dir!=-1
waitinput 4
Until %key=27
End
Alles anzeigen
Abt. Speedtest für Profan-Befehle
=====================
Die Sache ist zuerst auf den jeweiligen Computer zu kalibrieren: Man entfernt alle Payload-Daten aus der Testschleife, startet je einen Compiler- und Interpreterlauf und setzt die jeweilige Laufzeit [ms] in die ensprechenden Variablen subtr& für Compiler- und Interpreterlauf ein. Anschließend kann man bestimmte Software-Konstrukte als Schleifenpayload vom Netto-Zeitbedarf her testen und vergleichen. Defaultmäßig sind für Interpreter 100.000 Schleifendurchläufe, für Compiler 1 Mio. Durchläufe vorgesehen. Diese Zahl läßt sich aber (falls z.B. Langeweile droht) anpassen, es verringert sich lediglich die Meßgenauigkeit.
Gruss
P.S.: Nachstehend wurde z.B. der Zeitbedarf zum Durchlaufen von 10 Leerzeilen ermittelt. Zum Kalibrieren bitte alle Zeilen zwischen Whileloop und Endwhile rausnehmen und die Bruttozeit als Subtraktionskonstante subtr&, jeweils für Compiler und Interpreter getrennt, einprogrammieren!
goto "init":Meßschleife:
whileloop n&
endwhile
tm&=&gettickcount-tm&
'---------------------------------------------------
'--- Parkbereich für Payload- und Testdaten --------
'-------------- Compiler / Interpreter -------------
' 1 Leerzeile ' 0.187 / 4.05 µs
'10 Leerzeilen 1.1390 / 33.85 µs
's!=s& ' 2.0280 / 9.04 µs
's&=s! ' 2.215 / 9.04 µs
's&=&Loop ' 6.8170 / 22.46 µs
's!=&Loop ' 6.8170 / 22.46 µs
's!=s!+&Loop ' 9.2980 / 29.79 µs
's&=s&+&Loop ' 9.0640 / 29.22 µs
'inc s&,&Loop ' 6.6670 / 22.93 µs
's!=sin(&Loop)' 8.2840 / 31.82
's!=cos(&Loop)' 8.2840 / 31.82
's!=tan(&Loop)' 8.4550 / 31.82
's!=arctan(2) ' 3.1520 / 19.18
's!=arctan(0.2)'3.479 / 20.90
's!=&Loop-s! '9.22 / 29.79
's!=1111.111 ' 2.309 / 12.64
's!=&Loop:s!=s!*s!/s! '13.807 / 44.92
'----------------------------------------------------------------------------
case s&:s!=s&
print " \n Ergebnis: ";s!;" in ";n&;" Läufen ermittelt in ";tm&/1000;" s"
print "\n ";INT(n&*1000/tm&);" Schleifendurchläufe pro Sekunde\n"
'Zuerst die Subtraktionskonstanten (bei mir 452/1139 ms) durch Leerschleifenmessung ermitteln!
$IFDEF compiler
subtr&=452
$ELSE
subtr&=1139
$ENDIF
print "\n Netto-CPU-Zeit: ";int(tm&-subtr&);" ms für ";n&;" Payload-Vorgänge ";
$IFDEF compiler
print "(COMPILER)"
$ELSE
print "(INTERPRETER)"
$ENDIF
print "\n Zeitbedarf je Payload-Vorgang: ";(tm&-subtr&)*1000/n&;" µs"
beep
waitinput
end
init:
WindowTitle "Speedtest für Profan-Befehle"
cls
font 2
randomize
declare n&,s&,s!,subtr&
n&=100000
$IFDEF compiler
n&=1000000
$ENDIF
Print "\n Messung läuft ..."
locate 2,1
s!=rnd(2^31-1)*10^rnd(5)
var tm&=&gettickcount
goto "Meßschleife"
Alles anzeigen
PPS: Wer in 'Promille' arbeiten will, dividiert seine Laufzeiten einfach durch die Subtraktionskonstante. Dann kommt es auf die jeweilige Rechnergeschwindigkeit nämlich nicht an.
Abt. Gummiband-Pendel im Wind
=====================
Naja... äh... jedenfalls: Gruss!
Windowtitle "Gummiband-Pendel im Wind" '(CL)CopyLeft 2014-03 by P.Specht, Wien
Windowstyle 24:Window 0,0-%maxx,%maxy-40 ' Keine wie auch immer geartete Gewähr!
randomize:var col&=rgb(200+rnd(56),200+rnd(56),200+rnd(56))
var xx&=width(%hwnd):var yy&=height(%hwnd):var xh!=xx&/2:var yh!=yy&/2:var zoom!=2000
declare x!,y!,dx!,dy!,mx!,my!,r!,fk!,m!,f!,fx!,fy!,w!,a!,ax!,ay!,v!,vx!,vy!,g!,t!,wind!
g! =9.80665'm/s²
fk!=0.3 'zoom*N/m
t! =0.01 'Zeitschritt
m! =4.8 'kg
MCls xx&,yy&
REPEAT
StartPaint -1:ClS col&
print Fx!:print Fy!
usepen 0,1,0 : line xh!,0 - xh!,yy& : line 0,yh! - xx&,yh!
usepen 0,3,0 : line %mousex,%mousey - xh!+x!*zoom!,yh!-y!*zoom!
usepen 0,20,$9F0000 : line %mousex,%mousey - %mousex-1,%mousey
usepen 0,47,200 : line xh!+x!*zoom!,(yh!-y!*zoom!-1) - xh!+x!*zoom!,yh!-y!*zoom!
EndPaint
MCopyBMP 0,0-xx&,yy& > 0,0;0
mx!=%mousex-xh!-x!*zoom! : my!=yh!-%mousey-y!*zoom!
dx!=mx!-x! : dy!=my!-y!
Fx!=dx!*fk! : Fy!=dy!*fk!
ax!=Fx!/m! : ay!=Fy!/m! - g! 'Gravitation
wind!=(rnd(90)-rnd(70))/zoom!
vx!=vx!+.5*ax!*t!+wind! : vy!=vy!+0.5*ay!*t!
vx!=vx!*0.97 : vy!=vy!*0.97
x!=x!+vx!*t!: y!=y!+vy!*t!
waitinput 4
UNTIL %key=27
end
Alles anzeigen
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!