Math en s'amusant
Re: Math en s'amusant
Super, PAPIPP !
J'avais besoin de 30 secondes de détente, pour me remettre d'une charge de données à traiter qui ne cesse. Et j'ai apprécié ces jeux de mots.
Pi est impressionnant. Pendant des siècles, sa précision s'est faite impénétrable, puis les difficultés de son calcul ont été pulvérisées dans les années 80, bien que Pi reste infini.
J'avais besoin de 30 secondes de détente, pour me remettre d'une charge de données à traiter qui ne cesse. Et j'ai apprécié ces jeux de mots.
Pi est impressionnant. Pendant des siècles, sa précision s'est faite impénétrable, puis les difficultés de son calcul ont été pulvérisées dans les années 80, bien que Pi reste infini.
- Kwai chang caine
- Messages : 6962
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Math en s'amusant
Top cool !!!!MC PAPIPP a écrit :Certes le PIs est imbuvable mais ce qui en sort l’est (lait)
Vous allez de mal en Pis. Elève Kcc vous serez au Piquet.
Certains disent que le PIment.
Je ne le crois pas car si le Pirate pour vous c’est à cause de vos Pirouettes.
De toutes manières au Pifomètre le Pivot 3,14.
Le PIlier aux nombres complexes n’est pas un PIs-aller (pis à lait) il n’est donc pas vache.
Merci KCC.
A+
Moi j'ai pas assez intelligent pour savoir si le PIratePappip's Delight a écrit :Je ne le crois pas car si le Pirate
Mais aprés c'que j'viens d'lire...j'ai sûr que le paPIpp rap !!! yo !!!!
Merci plutôt à toi MAITRémathique
Re: Math en s'amusant
Dessin d'un cercle passant par 3 points définit "au hasard",
source Cercle passant par 3 points (Obs. Lyon - phm - 2006/02/05 - cercle_3pts.wpd)
https://cral-perso.univ-lyon1.fr/labo/f ... e_3pts.pdf
Falsam, je n'ai pas réussi en utilisant ton fond de code je te laisse le plaisir de convertir "à ta sauce"...
code utilisant la lib VectorDrawing, rien de bien sorcier, mais je comprends ce que je fait...
ça faisait perpet de temps (code pondu en octobre 2019) que je n'avais pas utilisé purebasic.
et afin de relancer le sujet un peu spamé par des bots chinois...
Pat
source Cercle passant par 3 points (Obs. Lyon - phm - 2006/02/05 - cercle_3pts.wpd)
https://cral-perso.univ-lyon1.fr/labo/f ... e_3pts.pdf
Falsam, je n'ai pas réussi en utilisant ton fond de code je te laisse le plaisir de convertir "à ta sauce"...
code utilisant la lib VectorDrawing, rien de bien sorcier, mais je comprends ce que je fait...
ça faisait perpet de temps (code pondu en octobre 2019) que je n'avais pas utilisé purebasic.
et afin de relancer le sujet un peu spamé par des bots chinois...
Pat
Code : Tout sélectionner
#Fen1 = 0
#Fen1_Canvas1 = 0
#Fen1_Font1 = 0
#FontSize = 12
#Margin = 6 ;Marge affichage texte
#NbSegmentPolygon = 12
#FontName2 = "Monotype Corsiva"
#FontName1 = "Arial"
; sinus = axe des Y
; cosinus = axe des X
; angle d'un point d'un cercle par rapport à son centre
; angle = Arcsin(x) ou Arccos(x)
;Structure d'un vecteur
Structure Vector
x.f ;Position x
y.f ;Position y
EndStructure
;Points A, B et *pt
Global A.Vector, B.Vector, C.Vector, D.Vector, *pt.vector
Global *M1.Vector, *M2.vector ; milieu des segment [A B] et [B C]
;Afficher un texte
Global SpriteGauche,SpriteDroit, Buffer.s, TextWidth, TextHeight
;Marge affichage texte
Global Margin = 6,LargeuDeLaLigne.d=1
;{ Macro Trace() extension de la fonction debug de purebasic
; par G-Rom Dim Juin 12, 2016
; http://www.purebasic.fr/french/viewtopic.php?f=1&t=16107
;
Macro Quote
"
EndMacro
Macro Trace(name)
Debug "Line : " + Str(#PB_Compiler_Line) + " Name = "+Quote#name#Quote+ " Value = " + name
EndMacro
;}
Procedure DessinePoint(*P1.Vector, texte.s)
; dessin du point
StrokePath(LargeuDeLaLigne)
AddPathCircle(*p1\x, *p1\y, 2)
VectorSourceColor(RGBA(255, 0, 0, 255))
VectorFont(FontID(#Fen1_Font1))
ClosePath()
; libellé du point
StrokePath(LargeuDeLaLigne)
MovePathCursor(*p1\x - Margin*2, *p1\y - Margin*2)
AddPathText(Texte)
VectorSourceColor(RGBA(0, 0, 0, 255))
ClosePath()
EndProcedure
Procedure DessineCerclePassantPar3Point(*P1.Vector,*P2.Vector,*P3.Vector)
;B5 = x1 *p1\x
;C5 = y1 *p1\y
;D5 = x2 *p2\x
;E5 = y2 *p2\y
;F5 = x3 *p3\x
;G5 = y3 *p3\y
;H5 = xc
;i5 = yc
;j5 = RC
; point x du centre : xc =((F5,2-D5,2+G5,2-E5,2)/(2*(G5-E5))-(D5,2-B5,2+E5,2-C5,2)/(2*(E5-C5)))/((F5-D5)/(G5-E5)-(D5-B5)/(E5-C5))
; point y du centre : yc =-(D5-B5)/(E5-C5)*H5+(D5,2-B5,2+E5,2-C5,2)/(2*(E5-C5))
; rayon du cercle : rc =RACINE((B5-H5),2+(C5-I5),2)
Protected B5.d,C5.d,D5.d,E5.d,F5.d,G5.d,H5.d,i5.d,j5.d
Protected PtCentre.Vector
B5 = *p1\x
C5 = *p1\y
D5 = *p2\x
E5 = *p2\y
F5 = *p3\x
G5 = *p3\y
H5 = ((Pow(F5,2)-Pow(D5,2)+Pow(G5,2)-Pow(E5,2))/(2*(G5-E5))-(Pow(D5,2)-Pow(B5,2)+Pow(E5,2)-Pow(C5,2))/(2*(E5-C5)))/((F5-D5)/(G5-E5)-(D5-B5)/(E5-C5))
i5 = -(D5-B5)/(E5-C5)*H5+(Pow(D5,2)-Pow(B5,2)+Pow(E5,2)-Pow(C5,2))/(2*(E5-C5))
j5 = Sqr(Pow((B5-H5),2)+Pow((C5-I5),2))
PtCentre\x = H5
PtCentre\y = i5
DessinePoint(PtCentre,"")
AddPathCircle(H5, i5, j5)
VectorSourceColor(RGBA(255, 0, 0, 255))
StrokePath(LargeuDeLaLigne)
ClosePath()
; longueur L d’un arc de cercle = angle en radian * rayon
EndProcedure
If OpenWindow(0, 0, 0, 800, 600, "Jeu de Math : Dessine un segment d'arc par 3 points", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CanvasGadget(#Fen1_Canvas1, 0,0, WindowWidth(#Fen1), WindowHeight(#Fen1))
LoadFont(#Fen1_Font1, #FontName1, #FontSize)
;Définition du point A
A\x = 100
A\y = 300
;Définition du point B
B\x = 300
B\y = 50
;Définition du point C
C\x = 570
C\y = 400
If StartVectorDrawing(CanvasVectorOutput(#Fen1_Canvas1))
; ;Affichage les points A B C
DessinePoint(A,"A")
DessinePoint(B,"B")
DessinePoint(C,"C")
DessineCerclePassantPar3Point(A,B,C)
StopVectorDrawing()
EndIf
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf
Re: Math en s'amusant
Petite variante du code de MLD
Code : Tout sélectionner
;falsam - Tracé de points sur un cercle
;appli MLD
;Niveau de difficulté : *
; apparition/disparition des dots : Ar-S
Enumeration Window
#mainForm
EndEnumeration
Enumeration Gadget
#Canvas
EndEnumeration
;Centre X et Y d'un cercle
Global CX = 400
Global CY = 300
;Rayon du cercle
Global Radius.i = 150
Global Maxangle,color
;Plan de l'application
Declare Start()
Declare Draw()
Declare Exit()
Start()
Procedure Start()
OpenWindow(#mainForm, 0, 0, 800, 600, "Point tournant autour d'un cercle", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(#Canvas, 0, 0, 800, 600)
AddWindowTimer(0, 1, 100)
BindEvent(#PB_Event_Timer,@Draw())
BindEvent(#PB_Event_CloseWindow, @Exit())
Repeat : WaitWindowEvent() : ForEver
EndProcedure
Procedure Draw()
Static Angle ;Angle variant de 0 à 360 Degrés
Protected X, Y ;Coordonnées X, Y du point circulant sur le cercle
maxangle + 30
If maxangle > 360 : maxangle = 0
If color = 0 : color = $FFFFFF
Else
color = 0
EndIf
EndIf
StartDrawing(CanvasOutput(#Canvas))
;L'angle varie de 0 à 360 Degrés incrémenté + 10
For Angle = 0 To maxangle Step 10
;Dessin du cercle
DrawingMode(#PB_2DDrawing_Default)
;Nouvelles coordonnées X & Y du point
X = CX + Radius * Cos(Angle * #PI / 180)
X2 = CX + Radius * Cos((Angle-30) * #PI / 180)
Y = CY + Radius * Sin(Angle * #PI / 180)
Y2 = CY + Radius * Sin((Angle-30) * #PI / 180)
;Dessin du point
Circle(X, Y, 3, color)
Next
StopDrawing()
EndProcedure
Procedure Exit()
End
EndProcedure
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Math en s'amusant
c'est mieux avec:
Code : Tout sélectionner
For Angle = - 90 To maxangle - 90 Step 10
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Déplacement d'un point C sur une suite de segment de droite
Ma petite contribution ...
Pour se deplacer sur un chemin constitué de plusieurs segments en ne connaissant que la distance sur ce chemin
Pour se deplacer sur un chemin constitué de plusieurs segments en ne connaissant que la distance sur ce chemin
Code : Tout sélectionner
EnableExplicit
Procedure.f distanceBetwenPoint(x1, y1, x2, y2)
ProcedureReturn Sqr((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
EndProcedure
If InitSprite()
InitKeyboard()
InitMouse()
EndIf
OpenWindow(0, 0, 0, 800, 600, "Test", #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
Structure p
x.f
y.f
EndStructure
;Path
NewList Path.p()
AddElement(path()):path()\x=10:path()\y=10
AddElement(path()):path()\x=50:path()\y=30
AddElement(path()):path()\x=60:path()\y=45
AddElement(path()):path()\x=80:path()\y=80
AddElement(path()):path()\x=120:path()\y=90
AddElement(path()):path()\x=150:path()\y=150
AddElement(path()):path()\x=250:path()\y=300
AddElement(path()):path()\x=300:path()\y=250
AddElement(path()):path()\x=500:path()\y=100
AddElement(path()):path()\x=600:path()\y=50
AddElement(path()):path()\x=750:path()\y=500
AddElement(path()):path()\x=100:path()\y=300
Define.l Distance=0
Define.l n,x1,x2,y1,y2,hypothenus,OldPathDistance,PathDistance,SegmentDistance
Define Target.p
Repeat
Repeat : Until WindowEvent() = 0
Distance=Distance+5
StartDrawing(ScreenOutput())
PathDistance=0
For n=0 To ListSize(Path())-1
SelectElement(Path(),n)
x1=Path()\x
y1=Path()\y
If SelectElement(Path(),n+1)
x2=Path()\x
y2=Path()\y
;Calcul Path Distance
OldPathDistance=PathDistance
hypothenus=distanceBetwenPoint(x1, y1, x2, y2)
PathDistance=PathDistance+hypothenus
;Draw
LineXY(x1,y1,x2,Y2,#White)
Circle(x1,y1,5,#Red)
Circle(x2,y2,5,#Red)
;Draw target
If Distance>=OldPathDistance And Distance<PathDistance ; If you are one this segment
SegmentDistance=Distance-OldPathDistance
Target\x=x1+(SegmentDistance/hypothenus*(x2-x1))
Target\y=y1+(SegmentDistance/hypothenus*(y2-y1))
Circle(Target\x,Target\y,5,#Green)
EndIf
EndIf
Next
StopDrawing()
FlipBuffers()
ClearScreen(RGB(128, 128, 128))
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Re: Math en s'amusant
Bonjour à tous
Voici un code qui détermine PI avec autant de digits que l’on désir.
Ce code, d’une utilité assez restreinte, est plutôt vu d’un point de vue amusant, c’ est une copie en purebasic du célèbre site rosetta code task :
https://rosettacode.org/wiki/Category:Programming_Tasks
A+
Voici un code qui détermine PI avec autant de digits que l’on désir.
Ce code, d’une utilité assez restreinte, est plutôt vu d’un point de vue amusant, c’ est une copie en purebasic du célèbre site rosetta code task :
https://rosettacode.org/wiki/Category:Programming_Tasks
Code : Tout sélectionner
#SCALE = 10000
#ARRINT= 2000
Procedure Pi(Digits)
Protected First=#True, Text$
Protected Carry, i, j, sum
Dim Arr(Digits)
For i=0 To Digits
Arr(i)=#ARRINT
Next
i=Digits
While i>0
sum=0
j=i
While j>0
sum*j+#SCALE*arr(j)
Arr(j)=sum%(j*2-1)
sum/(j*2-1)
j-1
Wend
Text$ = RSet(Str(Carry+sum/#SCALE),4,"0")
If First
Text$ = ReplaceString(Text$,"3","3.")
First = #False
EndIf
Print(Text$)
Carry=sum%#SCALE
i-14
Wend
EndProcedure
nbdigits=24*1024*2
; nbdigits=24*1024*10
; nbdigits=24*1024*1024
If OpenConsole()
PrintN(" pi avec = "+Str(nbdigits)+" digits")
PrintN(" ")
SetConsoleCtrlHandler_(?Ctrl,#True)
; Pi(24*1024*1024)
Pi(nbdigits)
EndIf
Input()
PrintN(#CRLF$+"Ctrl-C was pressed")
End
Ctrl:
Input()
PrintN(#CRLF$+"Ctrl-C was pressed")
End
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Re: Math en s'amusant
Ah... Pi !
Cet algo mérite peut-être un rappel de son auteur initial, qui ne s'est "pas foulé", en 1989, me semble-t-il.
C'était quelquechose comme << Bon euh moi je fais dans l'informatique... Pi, je le connais à l'infini, comme 1/3 = 0.333333... etc... jusqu'à l'infini, ben Pi = 2,222222... etc... jusqu'à l'infini en base e. Et convertir un nombre de la base e à la base 10, c'est, comme qui dirait, on ne peut plus simple, de surcroît, en informatique : c'est fait pour ! >>
Cet algo mérite peut-être un rappel de son auteur initial, qui ne s'est "pas foulé", en 1989, me semble-t-il.
C'était quelquechose comme << Bon euh moi je fais dans l'informatique... Pi, je le connais à l'infini, comme 1/3 = 0.333333... etc... jusqu'à l'infini, ben Pi = 2,222222... etc... jusqu'à l'infini en base e. Et convertir un nombre de la base e à la base 10, c'est, comme qui dirait, on ne peut plus simple, de surcroît, en informatique : c'est fait pour ! >>
Re: Math en s'amusant
J'ai enfin retrouvé ce que je cherchais : l'algorithme "compte-goutte" de Stanley Rabinovitz.
Erratum dans le message précédent : pi n'est pas 2.22222... en base e. pi est 2.22222... dans une base variable (en l'occurrence 1/3; 2/5; 3/7; 4/9; 5;11; etc...
Erratum dans le message précédent : pi n'est pas 2.22222... en base e. pi est 2.22222... dans une base variable (en l'occurrence 1/3; 2/5; 3/7; 4/9; 5;11; etc...
Re: Math en s'amusant
moi pour calculer PI, je dis la phrase suivante :
"Que j'aime à faire connaître ce nombre utile aux sages, immortel Archimède, artiste, ingénieur qui de ton jugement peut priser la valeur, pour moi il eut de pareils avantages."
il suffit de compter le nombre de lettres dans chaque mot.
"Que j'aime à faire connaître ce nombre utile aux sages, immortel Archimède, artiste, ingénieur qui de ton jugement peut priser la valeur, pour moi il eut de pareils avantages."
il suffit de compter le nombre de lettres dans chaque mot.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !