Math en s'amusant
Re: Math en s'amusant
disons, que ça fait une belle paire de fesses , vu du dessus !!
si t'as pas vu ça, alors effectivement, t'es un vicelard !!
si t'as pas vu ça, alors effectivement, t'es un vicelard !!
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Math en s'amusant
Sympa ces petits codes. Merci a tous du partage.
@++
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Math en s'amusant
Merci Falsam pour ces petits codes. Moi qui suis un gros busard en math, j'apprécie ces petits codes et ne suis surement pas le seul.
~~~~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
Bonjour à tous,
comme il ne faut qu'une seule fonctionnalité à mettre en évidence, voici mon code.
comme il ne faut qu'une seule fonctionnalité à mettre en évidence, voici mon code.
Code : Tout sélectionner
#Jours_par_Semaine = 7
#Heures_par_Jour = 24
#Mn_par_Heure = 60
#Sec_par_Heure = 3600
#Sec_par_Mn = 60
Procedure Jour_en_Secondes(Jours.i)
secondes = Jours * #Heures_par_Jour * #Mn_par_Heure * #Sec_par_Mn
ProcedureReturn secondes
EndProcedure
Debug Jour_en_Secondes(1)
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 !
Re: Math en s'amusant
bon, j'en ai un peu bavé avec les pointeurs *vector, difficile (pour moi) à voir le contenu dans le deboggueur, je suis passé par tout un tas de variables intermédiaires...
il n'y a pas de teste pour savoir si l'intersection est possible
- cas des segments se chevauchant ou alignés -> coef. directeur identique
- cas ou les segments ne se croisent pas. -> segment parallèle
- cas ou les segment se croisent mais ou le point d'intersection se trouvent au delà de la limite de la longueur des segments -> intersection projetée
(bon c'est vrai que sans dessin c'est difficile à ce le représenter)
voilou ma petite contrib. petit code depuis bien bien longtemps.
Pat
il n'y a pas de teste pour savoir si l'intersection est possible
- cas des segments se chevauchant ou alignés -> coef. directeur identique
- cas ou les segments ne se croisent pas. -> segment parallèle
- cas ou les segment se croisent mais ou le point d'intersection se trouvent au delà de la limite de la longueur des segments -> intersection projetée
(bon c'est vrai que sans dessin c'est difficile à ce le représenter)
voilou ma petite contrib. petit code depuis bien bien longtemps.
Pat
Code : Tout sélectionner
;Patrick88 - 06/03/2018 - Recherche de du point d'intersection de 2 segments d'après
; http://www.purebasic.fr/french/viewtopic.php?f=1&t=17175
;Niveau de difficulté : *
;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 ; pt = pt d'intersection
;Afficher un texte
Global SpriteText, Buffer.s = "Intersection de 2 segments [A B] et [C D]", TextWidth, TextHeight
;Marge affichage texte
Global Margin = 6
;Plan de l'application
Declare GameStart()
Declare GameUpdate()
Declare GameEnd()
;Math
Declare.i inter2DPoint(*P1.Vector, *P2.Vector ,*P3.Vector, *P4.Vector)
GameStart()
Procedure GameStart()
If InitSprite()
InitKeyboard()
InitMouse()
;Définition du point A
A\x = 100
A\y = 150
;Définition du point B
B\x = 575
B\y = 525
;Définition du point A
C\x = 150
C\y = 573
;Définition du point B
D\x = 585
D\y = 50
*pt = Inter2DPoint(A, B, C, D)
OpenWindow(0, 0, 0, 800, 600, "Jeu de Math : Intersection de 2 segments [A B] et [C D]", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
BindEvent(#PB_Event_CloseWindow, @GameEnd())
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
;Creation du sprite text à afficher
SpriteText = CreateSprite(#PB_Any, 120, 24, #PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(SpriteText))
TextWidth = TextWidth(Buffer)
textHeight = TextHeight(Buffer)
;Fond
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, 120, 24, RGBA(0, 0, 0, 0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
RoundBox(0, 0, 120, 24, 6, 6, RGBA(218, 165, 32, 255))
;Text
DrawingMode(#PB_2DDrawing_Transparent)
DrawText((120 - TextWidth)/2, (24 - TextHeight)/2, Buffer, RGBA(0, 0, 0, 255))
;Contour
DrawingMode(#PB_2DDrawing_Outlined)
RoundBox(0, 0, 120, 24, 6, 6, RGBA(0, 0, 0, 255))
StopDrawing()
GameUpdate()
Else
GameEnd()
EndIf
EndProcedure
Procedure GameUpdate()
Repeat : Repeat : Until WindowEvent() = 0
ClearScreen(RGB(255,255,255))
;Affichage des point A B C D
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
;Affichage point A
Circle(A\x, A\y, 2, RGB(255, 0, 0))
DrawText(A\x - Margin*2, A\y - Margin*2, "A", RGB(0, 0, 0))
;Affichage point B
Circle(B\x, B\y, 2, RGB(255, 0, 0))
DrawText(B\x + Margin, B\y - Margin*2, "B", RGB(0, 0, 0))
;Affichage point C
Circle(C\x, C\y, 2, RGB(255, 0, 0))
DrawText(C\x + Margin, C\y - Margin*2, "C", RGB(0, 0, 0))
;Affichage point D
Circle(D\x, D\y, 2, RGB(255, 0, 0))
DrawText(D\x + Margin, D\y - Margin*2, "D", RGB(0, 0, 0))
;Ligne entre A et B
LineXY(A\x, A\y, B\x, B\y, RGB(0, 0, 0))
;Ligne entre C et D
LineXY(C\x, C\y, D\x, D\y, RGB(0, 0, 0))
;Affichage point D'intersection
Circle(*pt\x, *pt\y, 2, RGB(255, 0, 0))
DrawText(*pt\x + Margin, *pt\y - Margin*2, "Intersection", RGB(0, 0, 0))
StopDrawing()
ExamineKeyboard()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
EndProcedure
Procedure GameEnd()
End
EndProcedure
;Retourne l'intersection de deux vecteurs (Points 2D)
Procedure.i inter2DPoint(*P1.Vector, *P2.Vector ,*P3.Vector, *P4.Vector)
Protected *Result.Vector = AllocateMemory(SizeOf(Point))
Protected coef_S1.f, coef_S2.f ; coef directeur ou tangente alpha en radian
Protected ord_S1.f, ord_S2.f ; point sur l'ordonné
coef_S1 = (*P2\y - *P1\y) / (*P2\x - *P1\x)
coef_S2 = (*P4\y - *P3\y) / (*P4\x - *P3\x)
ord_S1 = *P1\y - coef_S1 * *P1\x
ord_S2 = *P3\y - coef_S2 * *P3\x
*Result\x = (ord_S2 - ord_S1) / (coef_S1 - coef_S2)
*Result\y = coef_S1 * *Result\x + ord_S1
ProcedureReturn *Result
EndProcedure
Re: Math en s'amusant
Micoute a écrit :Bonjour à tous,
comme il ne faut qu'une seule fonctionnalité à mettre en évidence, voici mon code.Code : Tout sélectionner
#Jours_par_Semaine = 7 #Heures_par_Jour = 24 #Mn_par_Heure = 60 #Sec_par_Heure = 3600 #Sec_par_Mn = 60 Procedure Jour_en_Secondes(Jours.i) secondes = Jours * #Heures_par_Jour * #Mn_par_Heure * #Sec_par_Mn ProcedureReturn secondes EndProcedure Debug Jour_en_Secondes(1)
heu ... pourquoi ne pas faire directement ceci ??
Code : Tout sélectionner
Procedure Jour_en_Secondes(Jours.i)
secondes = 86400*Jours.i
ProcedureReturn secondes
EndProcedure
Debug Jour_en_Secondes(1)
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Math en s'amusant
@Patrick88 : Très bien ce code pour un tower défense 2D par exemple. Code ajouté dans le premier message.
Pensez au titre d'accroche quand vous proposez un code.
Pensez au titre d'accroche quand vous proposez un code.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Math en s'amusant
De quel coté d'un segment [A B] se trouve un point C
un segment [A B] et un point C quelque part sur l'écran.
Indique de quel coté du segment se trouve le point, à droite ou à gauche du segment.
[Up] code nettoyé comme précédement, affichage du coté du point dans la petite bubulle -> Procedure.l CreeSpritetexte(texte.s) + les 2 variables SpriteGauche,SpriteDroit
Pat
un segment [A B] et un point C quelque part sur l'écran.
Indique de quel coté du segment se trouve le point, à droite ou à gauche du segment.
[Up] code nettoyé comme précédement, affichage du coté du point dans la petite bubulle -> Procedure.l CreeSpritetexte(texte.s) + les 2 variables SpriteGauche,SpriteDroit
Pat
Code : Tout sélectionner
;Patrick88 - 06/03/2018 - Indique de quel coté du segment [A B] se trouve le point C, à droite ou à gauche du segment d'après
; http://www.purebasic.fr/french/viewtopic.php?f=1&t=17175
;Niveau de difficulté : *
;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
;Afficher un texte
Global SpriteGauche,SpriteDroit, Buffer.s, TextWidth, TextHeight
;Marge affichage texte
Global Margin = 6
;Plan de l'application
Declare GameStart()
Declare GameUpdate()
Declare GameEnd()
;Math
Declare.i coTd1Segment2d(*P1.Vector, *P2.Vector ,*P3.Vector)
GameStart()
Procedure.l CreeSpritetexte(texte.s)
Protected SpriteText.l
;Creation du sprite text à afficher
SpriteText = CreateSprite(#PB_Any, 200, 24, #PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(SpriteText))
TextWidth = TextWidth(texte)
textHeight = TextHeight(texte)
;Fond
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, SpriteWidth(SpriteText), 24, RGBA(0, 0, 0, 0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
RoundBox(0, 0, SpriteWidth(SpriteText), 24, 6, 6, RGBA(218, 165, 32, 255))
;Text
DrawingMode(#PB_2DDrawing_Transparent)
DrawText((SpriteWidth(SpriteText) - TextWidth)/2, (24 - TextHeight)/2, texte, RGBA(0, 0, 0, 255))
;Contour
DrawingMode(#PB_2DDrawing_Outlined)
RoundBox(0, 0, SpriteWidth(SpriteText), 24, 6, 6, RGBA(0, 0, 0, 255))
StopDrawing()
ProcedureReturn SpriteText
EndProcedure
Procedure GameStart()
If InitSprite()
InitKeyboard()
InitMouse()
;Définition du point A
A\x = 100
A\y = 150
;Définition du point B
B\x = 575
B\y = 525
;Définition du point C
C\x = 150
C\y = 150;573
*pt = coTd1Segment2d(A, B, C)
OpenWindow(0, 0, 0, 800, 600, "Jeu de Math : Indique de quel coté du segment [A B] se trouve le point C, à droite ou à gauche du segment. ", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
BindEvent(#PB_Event_CloseWindow, @GameEnd())
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
SpriteGauche = CreeSpritetexte("et à gauche du segment [A B]")
SpriteDroit = CreeSpritetexte("et à droite du segment [A B]")
GameUpdate()
Else
GameEnd()
EndIf
EndProcedure
Procedure GameUpdate()
Repeat : Repeat : Until WindowEvent() = 0
ClearScreen(RGB(255,255,255))
;Affichage des point A B C D
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
;Affichage point A
Circle(A\x, A\y, 2, RGB(255, 0, 0))
DrawText(A\x - Margin*2, A\y - Margin*2, "A", RGB(0, 0, 0))
;Affichage point B
Circle(B\x, B\y, 2, RGB(255, 0, 0))
DrawText(B\x + Margin, B\y - Margin*2, "B", RGB(0, 0, 0))
;Affichage point C
Circle(C\x, C\y, 2, RGB(255, 0, 0))
DrawText(C\x + Margin, C\y - Margin*2, "C", RGB(0, 0, 0))
;Ligne entre A et B
LineXY(A\x, A\y, B\x, B\y, RGB(0, 0, 0))
StopDrawing()
If C\y > *pt\y
DisplayTransparentSprite(SpriteGauche, C\x+20, C\y - SpriteHeight(SpriteGauche)/2)
ElseIf C\y < *pt\y
DisplayTransparentSprite(SpriteDroit, C\x+20 , C\y - SpriteHeight(SpriteDroit)/2)
ElseIf C\y = *pt\y
DisplayTransparentSprite(SpriteDroit, C\x+20 , C\y - SpriteHeight(SpriteDroit)/2)
EndIf
;RotateSprite(SpriteText, Angle2DPoint(B, A), #PB_Absolute)
ExamineKeyboard()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
EndProcedure
Procedure GameEnd()
End
EndProcedure
; recherche de quel coté d'un segment se trouve le point
Procedure.i coTd1Segment2d(*P1.Vector, *P2.Vector ,*P3.Vector)
Protected *Result.Vector = AllocateMemory(SizeOf(Point))
Protected coef_S1.f, coef_S2.f ; coef directeur ou tangente alpha en radian
Protected ord_S1.f, ord_S2.f ; point sur l'ordonné
coef_S1 = (*P2\y - *P1\y) / (*P2\x - *P1\x)
ord_S1 = *P1\y - coef_S1 * *P1\x
*Result\x = *P3\x
*Result\y = coef_S1 * *Result\x + ord_S1
ProcedureReturn *Result
EndProcedure
Dernière modification par Patrick88 le mar. 06/mars/2018 12:44, modifié 2 fois.
Re: Math en s'amusant
déplace un point C perpendiculairement à un segment [A B]
Pat
Pat
Code : Tout sélectionner
;Patrick88 - 06/03/2018 - deplace un point C perpendiculairement à un segment [A B] d'après
; http://www.purebasic.fr/french/viewtopic.php?f=1&t=17175
;Niveau de difficulté : *
;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
;Afficher un texte
Global SpriteText, Buffer.s = "...", TextWidth, TextHeight
;Marge affichage texte
Global Margin = 6
;Plan de l'application
Declare GameStart()
Declare GameUpdate()
Declare GameEnd()
;Math
Declare.i DeplacePoint2dSur1Segment2d(*P1.Vector, *P2.Vector ,*P3.Vector)
GameStart()
Procedure GameStart()
If InitSprite()
InitKeyboard()
InitMouse()
;Définition du point A
A\x = 100
A\y = 150
;Définition du point B
B\x = 575
B\y = 525
;Définition du point C
C\x = 550
C\y = 50; 573
*pt = DeplacePoint2dSur1Segment2d(A, B, C)
OpenWindow(0, 0, 0, 800, 600, "Jeu de Math : deplace un point C perpendiculairement à un segment [A B] ", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
BindEvent(#PB_Event_CloseWindow, @GameEnd())
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
;Creation du sprite text à afficher
SpriteText = CreateSprite(#PB_Any, 120, 24, #PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(SpriteText))
TextWidth = TextWidth(Buffer)
textHeight = TextHeight(Buffer)
;Fond
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, 120, 24, RGBA(0, 0, 0, 0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
RoundBox(0, 0, 120, 24, 6, 6, RGBA(218, 165, 32, 255))
;Text
DrawingMode(#PB_2DDrawing_Transparent)
DrawText((120 - TextWidth)/2, (24 - TextHeight)/2, Buffer, RGBA(0, 0, 0, 255))
;Contour
DrawingMode(#PB_2DDrawing_Outlined)
RoundBox(0, 0, 120, 24, 6, 6, RGBA(0, 0, 0, 255))
StopDrawing()
GameUpdate()
Else
GameEnd()
EndIf
EndProcedure
Procedure GameUpdate()
Repeat : Repeat : Until WindowEvent() = 0
ClearScreen(RGB(255,255,255))
;Affichage des point A B C D
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
;Affichage point A
Circle(A\x, A\y, 2, RGB(255, 0, 0))
DrawText(A\x - Margin*2, A\y - Margin*2, "A", RGB(0, 0, 0))
;Affichage point B
Circle(B\x, B\y, 2, RGB(255, 0, 0))
DrawText(B\x + Margin, B\y - Margin*2, "B", RGB(0, 0, 0))
;Affichage point C
Circle(C\x, C\y, 2, RGB(255, 0, 0))
DrawText(C\x + Margin, C\y - Margin*2, "C", RGB(0, 0, 0))
;Ligne entre A et B
LineXY(A\x, A\y, B\x, B\y, RGB(0, 0, 0))
;Affichage point projeté *px
Circle(*pt\x, *pt\y, 2, RGB(255, 0, 0))
DrawText(*pt\x + Margin, *pt\y - Margin*2, "Point sur le segment [A B]", RGB(0, 0, 0))
;Ligne entre C et *pt
LineXY(C\x, C\y, *pt\x, *pt\y, RGB(255, 0, 0))
StopDrawing()
ExamineKeyboard()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
EndProcedure
Procedure GameEnd()
End
EndProcedure
; deplace un point C perpendiculairement à un segment [A B]
Procedure.i DeplacePoint2dSur1Segment2d(*P1.Vector, *P2.Vector ,*P3.Vector)
Protected *Result.Vector = AllocateMemory(SizeOf(Point))
Protected coef1.f ; coef directeur ou tangente alpha en radian
Protected ord1.f ; point sur l'ordonné
; on deplace le point P3 sur le segment [A B]
coef1 = (*P2\y - *P1\y) / (*P2\x - *P1\x)
ord1 = *P1\y - coef1 * *P1\x
; on recalcul le point
*Result\x = (coef1 * (*p3\y - ord1) + *p3\x) / ( 1 + Pow(coef1,2))
*Result\y = (-1/coef1) * *Result\x + *p3\y + (*p3\x / coef1)
ProcedureReturn *Result
EndProcedure
Re: Math en s'amusant
Calcul du point d'arrivé en fonction de la distance et de l'angle
qui va calculer le point d'arrivé , en prenant le point de depart, la distance, et l'angle en compte !!
autrement dit , s'il n'y a qu'une seule fonction a connaitre, c'est celle là , car elle permet
l'utilisation de deplacement, collisions, en jeux video 2D et 3D ....
ou de connaitre le point d'arrivé d'un jet de pierre par exemple en connaissant le point de depart et l'angle
le point de depart peut concerner un personnage , un endroit de l'ecran , ou de l'univers 2D ....
la fonction va calculer le point d'arrivé en fonction de la distance ...
Code : Tout sélectionner
x_arrive=X_depart.f+Cos(Angle*#PI/180)* Distance_a_parcourir.f
y_arrive=Y_depart.f+Sin(Angle*#PI/180)* Distance_a_parcourir.f
autrement dit , s'il n'y a qu'une seule fonction a connaitre, c'est celle là , car elle permet
l'utilisation de deplacement, collisions, en jeux video 2D et 3D ....
ou de connaitre le point d'arrivé d'un jet de pierre par exemple en connaissant le point de depart et l'angle
le point de depart peut concerner un personnage , un endroit de l'ecran , ou de l'univers 2D ....
la fonction va calculer le point d'arrivé en fonction de la distance ...
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Math en s'amusant
petite coquille (pas vraiment une)(dépend de quel coté on se place)
dans l'exemple Angle d'un segment de droite [A B]
si on est humain, c'est bon la fonction renvoi des degrés.
du coté de l'ordi, il ne comprends que les radians... faudrait rajouter un flag..
tant que tu y es, tu peux ajouter une fonction
pat
dans l'exemple Angle d'un segment de droite [A B]
si on est humain, c'est bon la fonction renvoi des degrés.
du coté de l'ordi, il ne comprends que les radians... faudrait rajouter un flag..
tant que tu y es, tu peux ajouter une fonction
Code : Tout sélectionner
;Retourne l'angle entre deux vecteurs 2D
Procedure.f Angle2Segment2D(*P1.Vector, *P2.Vector ,*P3.Vector, *P4.Vector)
Protected angle1.f, angle2.f
angle1 = Angle2DPoint(*P1.Vector, *P2.Vector)
angle2 = Angle2DPoint(*P3.Vector, *P4.Vector)
ProcedureReturn angle1 - angle2
EndProcedure
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Math en s'amusant
@Zorro : Calculer un point de chute uniquement en fonction d'un angle et d'une distance que je suppose linéaire et oblique me semble simpliste. Ca reviendrait à dire que la chute est verticale quand la distance est atteinte. Si ta distance est horizontale alors ta formule est dans ce cas bien compliquée
@Patrick88 : Tu abuses un peu avec ta procédure qui fait appel à une procédure inexistante. On est ici pour s'amuser. On veut un peu de code boudiou
@Patrick88 : Tu abuses un peu avec ta procédure qui fait appel à une procédure inexistante. On est ici pour s'amuser. On veut un peu de code boudiou
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Math en s'amusant
non ce n'est pas mon proposfalsam a écrit :@Zorro : Calculer un point de chute uniquement en fonction d'un angle et d'une distance que je suppose linéaire et oblique me semble simpliste. Ca reviendrait à dire que la chute est verticale quand la distance est atteinte. Si ta distance est horizontale alors ta formule est dans ce cas bien compliquée
ma fonction te donne a partir d'un point X,Y et d'un angle , et d'une distance , un point d'arrivé !
mon analogie a la pierre lancé considere effectivement que tu te situe sur un point de depart
que tu lances la pierre (ou plutot le galet qui glisse sur une patinoire) avec un angle de jet , et que tu veuilles que ce galet parcours une certaine distance
cela te renvois alors le point d'arrivée exact ! AVANT meme le lancé
c'est super utile par exemple pour un vaisseau spacial sur l'ecran 2d
il represente la position de depart , il se dirige dans un certain angle , avec un Pas de deplacement (qui represente ici la distance a parcourir a chaque boucle)
comme la fonction renvoie la coordonée d'arrivée, on peut lire la couleur a l'ecran de cette coordonée d'arrivée future de notre vaiseau , et ainsi savoir si un obstacle est present .. bref un test de collision
sinon on peut se servir de cette fonction comme je le fait avec le code de MiniPureGolo que j'ai posté recemment
pour deplacer une tortue qui laisse un trait derriere elle
on lui donne la coordonée de depart (la tortue) , le Pas de deplacement, et l'angle , on sait donc exactement sur quel pixel la tortue va atterrir
plus qu'a tracer un trait du point de depart, au point d'arrivée maintenant connu
cette fonction permet donc soit de savoir la couleur d'un pixel AVANT le deplacement d'un sprite (our un test de collision par exemple)
soit de connaitre le pixel d'arrivée AVANT le deplacement d'un sprite
et cette derniere information permet de dessiner, ou de changer la couleur du pixel d'arrivé
une espece de "Super LINE(x,y) " puis qu'on peut dessiner une ligne, sans se soucier de l'arrivée
juste en lui fournissant le point de depart, et l'angle du dessin ... et une longueur
le point d'arrivé c'est la fonction qui le renvoie ....
Mon PureGolo (interpreteur Logo maison ) est basé la dessus par exemple
ça ouvre la possibilité de dessiner comme on le ferai faire a un petit robot en lui donnant des ordres
"tourne a droite de 30 degres , avance de 10 pas , tourne a gauche de 50 degres , recule de 100 pas " etc...
donc ça peut aussi servir a diriger des Ennemis dans un Jeux de tir , ou de Tanks par exemple
pour chacun d'entre eux , on aura la position d'arrivé juste en donnant leur position , leur angle, et la distance qu'ils doivent parcourrir
ça renverra la coordonée d'arrivée ...
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Math en s'amusant
S'appelle tout simplement les coordonnées polaires par rapport aux coordonnées rectangulaires.
La base de tout système de dessin et du travail des géomètres.
Sinus côté opposé angle
Cosinus côté adjacent angle
Etc.
La base de tout système de dessin et du travail des géomètres.
Sinus côté opposé angle
Cosinus côté adjacent angle
Etc.
Re: Math en s'amusant
Je ne suis pas matheu, donc merci pour l'explication
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"