Programme de construction Python géométrie

Réponses à toutes vos questions de la 2nde à la Terminale toutes séries
Françoisdesantilles
Membre Relatif
Messages: 261
Enregistré le: 20 Déc 2021, 14:15

Programme de construction Python géométrie

par Françoisdesantilles » 28 Déc 2021, 12:39

Bonjour , j'ai un peu de mal à programmer ça en Python , est-ce que quelqu'un s'y connait un peu svp?

https://ibb.co/x8hCGT3



Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13686
Enregistré le: 08 Juin 2006, 08:55

Re: Programme de construction Python géométrie

par mathelot » 28 Déc 2021, 16:11

Bonjour,
j'ai fait les calculs qui accompagnent la figure pour vérifier que, si les données sont constructibles (longueurs et angles), alors elles sont calculables.

1)

cm
2)

cm
3)

cm
4)
cm
5)








6)

7)

8)
Modifié en dernier par mathelot le 30 Déc 2021, 23:57, modifié 3 fois.

Françoisdesantilles
Membre Relatif
Messages: 261
Enregistré le: 20 Déc 2021, 14:15

Re: Programme de construction Python géométrie

par Françoisdesantilles » 29 Déc 2021, 16:08

Merci c'est gentil, je pense que personne n'est fan de python ici, je vais m'y mettre

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13686
Enregistré le: 08 Juin 2006, 08:55

Re: Programme de construction Python géométrie

par mathelot » 31 Déc 2021, 18:16

re-bonjour,

il faudrait que tu précises si tu as le droit d'utiliser les calculs de longueurs et d'angles que j'ai effectués (auquel cas, je te propose que tu en fasses une démonstration , si tu le souhaites, essentiellement avec le théorème d'Al-kashi et les lignes trigonométriques sinus,cosinus,et tangente. ). On peut remarquer que la figure est constituée de quatre triangles et il suffit, dès lors, d'avoir une unique routine de traçage d'un triangle. Simplement, il faut bien paramétrer cette routine, de manière qu'elle soit la plus générale possible. Tracer un triangle , c'est disposer , par exemple, de trois longueurs de côté et de deux angles. On trace un premier côté,
puis un changement de direction, puis un deuxième côté, puis de nouveau un changement de direction, puis un troisième côté. . ça, c'est pour la 1ère méthode. Pour une seconde méthode, on peut considérer que la figure est un graphe connexe (d'un seul tenant) constitué de sommets et d'arêtes. A ce moment là,on peut enchainer le traçage des arêtes, en ayant au préalable, à chaque fois, déterminé leur direction.On répète alors les deux instructions turtle.right() et turtle.forward()
On peut tracer le graphe sans compléter les triangles au tout début. Par exemple, en suivant les sommets:
MPOMNOPQMRQ
lire ici: https://www.cours-gratuit.com/tutoriel- ... ule-turtle

Il y a trois petits problèmes , en Python, pour faire le dessin:
- faire le lien entre les centimètres et le nombre de pixels
- la possibilité de revenir sur ses pas quand on a tracé une arête
- est ce que les boucles se referment bien malgré l'imprécision des calculs. oui,la précision des calculs permet aux triangles de se refermer.
Modifié en dernier par mathelot le 03 Jan 2022, 18:43, modifié 4 fois.

azf

Re: Programme de construction Python géométrie

par azf » 31 Déc 2021, 20:28

Bonjour

La question est-elle : j'ai du mal à programmer ça en python, pourriez-vous m'aider?

La question est -elle : j'ai du mal à construire cette figure, pourriez-vous m'aider?

Si je pose la question de quelle est la question c'est que j'ai un doute sur la question posée et si j'ai un doute sur la question posée c'est que normalement quand on pose cette question-là à savoir : "j'ai du mal à programmer ça en Python, pourriez-vous m'aider?" On fait un peu plus que de poster une figure
On réalise un algorithme en pseudo-langage (ce que tout le monde sait faire quand on sait comment réaliser la figure)
Le pseudo-langage est à la convenance de celui qui l'écrit et accompagné de ses explications il est lisible par tout le monde (sauf par une machine évidemment)

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13686
Enregistré le: 08 Juin 2006, 08:55

Re: Programme de construction Python géométrie

par mathelot » 31 Déc 2021, 20:57

azf a écrit:Bonjour

La question est-elle : j'ai du mal à programmer ça en python, pourriez-vous m'aider?
La question est -elle : j'ai du mal à construire cette figure, pourriez-vous m'aider?
Si je pose la question de quelle est la question c'est que j'ai un doute sur la question posée


@azf : tout à fait d'accord.
C'est pour cette raison que je lui ai proposé d'écrire: soit une routine qui trace un triangle soit une routine qui trace un segment,i.e, une arête du graphe

Françoisdesantilles
Membre Relatif
Messages: 261
Enregistré le: 20 Déc 2021, 14:15

Re: Programme de construction Python géométrie

par Françoisdesantilles » 31 Déc 2021, 23:37

Bonjour,

A vrai dire j'ai déja effectuer un minimum de travail ,c'est juste qu'il n'a pas été posté.
Je n'aime pas trop écrire des choses qui je ne maitrise pas sur ce forum.
Il est important de préciser que l'image de l'exercice est extraite d'un devoir sur table, sans ordinateur, il fallait donc écrire le programme soit en langage naturel, soit en Python.
Néanmoins étant donné que c'est un devoir de Master enseignement je pense qu'il fallait programmer en Python.
Sincèrement je suis de bonne fois et le le ferai peu importe le langage, mais à mon rythme et grâce à l'aide de @mathelot .

Voici néanmoins ce que j'avais pu écrire :

1)Tracer un triangle MNO tel que MN=4cm ,l'angle MNO=65° et NO=5cm.

2)A partir des points M et O tracer un triangle MOP , rectangle en M , et tel que l'angle MOP=40°.

3)A partir des points M et P construire le triangle MPQ tel que MP=MQ , et PQ = 3cm.

4)Enfin construire le triangle MQR tel que MQ=QR=MR

azf

Re: Programme de construction Python géométrie

par azf » 01 Jan 2022, 00:54

Bonjour

Mais pour vous que signifie l'expression "tel que" dans une construction de quelque chose?

Françoisdesantilles a écrit:
1)Tracer un triangle MNO tel que MN=4cm ,l'angle MNO=65° et NO=5cm.


et tous vos autres paragraphes 2) 3) et 4) eux aussi contiennent cette fameuse expression "tel que"

Vous connaissez Nicolas Boileau (1636-1711)

Ce que l’on conçoit bien s’énonce clairement, Et les mots pour le dire arrivent aisément.

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13686
Enregistré le: 08 Juin 2006, 08:55

Re: Programme de construction Python géométrie

par mathelot » 01 Jan 2022, 04:45

...
Modifié en dernier par mathelot le 02 Jan 2022, 16:05, modifié 6 fois.

catamat
Membre Irrationnel
Messages: 1166
Enregistré le: 07 Mar 2021, 11:40

Re: Programme de construction Python géométrie

par catamat » 01 Jan 2022, 16:27

Bonjour

Un logiciel qui sert pas mal dans l'éducation (mis à part Geogebra) est Geoplan
Dans ce logiciel le programme de construction est écrit dans un langage naturel en français.
https://fr.wikipedia.org/wiki/Geoplan

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13686
Enregistré le: 08 Juin 2006, 08:55

Re: Programme de construction Python géométrie

par mathelot » 02 Jan 2022, 16:03

@Françoisdesantilles
ci-joint un programme en Python qui trace les quatre triangles demandés (la figure demandée).
Ces triangles sont parcourus dans le sens horaire selon
Pour chaque dessin de triangle, le point origine du tracé est M.


Code: Tout sélectionner
import turtle
import decimal
from sys import exit
tur = turtle.Turtle()
#facteur d'échelle pour agrandir/rapetisser les longueurs
scale=40.0
tur.right(180)
tur.pendown()

def tracer_triangle(a,A,b,B,c,C):
   #baisse le stylo
   #tur.pendown()         
   #trace le 1er côté
   tur.forward(b)         
   #1er changement de direction
   tur.right(180-A)       
   #trace le 2ème côté
   tur.forward(c)
   #2ème changement de direction
   tur.right(180-B)       
   #trace le 3ème côté
   tur.forward(a)     
   # positionne le curseur pour démarrer le triangle suivant
   tur.right(180)           
   #relève le stylo
   #tur.penup()

# 1er triangle   
a1=4.908693261*scale
A1=65
b1=4*scale
B1=47.60658511
c1=5*scale
C1=67.39341489
tracer_triangle(a1,A1,b1,B1,c1,C1)
#tracer_triangle(4.908693261,65,4,47.60658511,5,67.39341489)


# 2eme triangle
a1=4.118882705*scale
A1=40
b1=4.908693261*scale
B1=50
c1=6.407843964*scale
C1=90
tracer_triangle(a1,A1,b1,B1,c1,C1)

#3eme triangle
a1=4.118882705*scale
A1=68.6430924
b1=4.118882705*scale
B1=68.6430924
c1=3*scale
C1=42.71381521
tracer_triangle(a1,A1,b1,B1,c1,C1)

#4eme triangle
a1=4.118882705*scale
A1=60
b1=4.118882705*scale
B1=60
c1=4.118882705*scale
C1=60
tracer_triangle(a1,A1,b1,B1,c1,C1)

tur.hideturtle()


Modifié en dernier par mathelot le 05 Jan 2022, 01:28, modifié 4 fois.

catamat
Membre Irrationnel
Messages: 1166
Enregistré le: 07 Mar 2021, 11:40

Re: Programme de construction Python géométrie

par catamat » 02 Jan 2022, 17:32

Pour ce qui concerne Geoplan, l'intérêt c'est qu'il n'y a aucun calcul à faire donc au collège cela peut très bien être utilisé.

Le "programme" de la figure est le suivant :
Code: Tout sélectionner
Figure Géoplan
Numéro de version: 2

Position de Roxy: Xmin: -4.45402298851, Xmax: 5.54597701149, Ymax: 5.61781609195
Objet dessinable Roxy, particularités: rouge, non dessiné

M point de coordonnées (0,0) dans le repère Roxy
N point de coordonnées (-4,0) dans le repère Roxy
M' image de M par la rotation de centre N et d'angle 65 (degré)
   Objet dessinable M', particularités: non dessiné
C cercle de centre N et de rayon 5 (unité Uoxy)
   Objet dessinable C, particularités: non dessiné
P' point d'intersection 1 de la droite (M'N) et du cercle C
   Objet dessinable P', particularités: non dessiné
O point d'intersection 2 de la droite (M'N) et du cercle C
T1 polygone MNO
D1 droite perpendiculaire à (OM) passant par M
   Objet dessinable D1, particularités: non dessiné
M1 image de M par la rotation de centre O et d'angle 40 (degré)
   Objet dessinable M1, particularités: non dessiné
P point d'intersection des droites D1 et (OM1)
T2 polygone OMP
C1 cercle de centre P et de rayon 3 (unité Uoxy)
   Objet dessinable C1, particularités: non dessiné
C2 cercle de centre M passant par P
   Objet dessinable C2, particularités: non dessiné
Q point d'intersection 1 des cercles C1 et C2
Q' point d'intersection 2 des cercles C1 et C2
   Objet dessinable Q', particularités: non dessiné
T3 polygone MPQ
C3 cercle de centre M passant par Q
   Objet dessinable C3, particularités: non dessiné
C4 cercle de centre Q passant par M
   Objet dessinable C4, particularités: non dessiné
R' point d'intersection 1 des cercles C3 et C4
   Objet dessinable R', particularités: non dessiné
R point d'intersection 2 des cercles C3 et C4
T4 polygone MQR
Préférences pour l'impression ou la copie ajustée :
  Unité de référence : unité de longueur Uoxy égale à 10 mm
  Type de copie : vectorisée en couleur

Angles en degrés par défaut

Commentaire

Fin de la figure


A l'impression il suffit de définir en mm l'unité du repère soit ici 10 mm pour avoir la figure aux données de l'énoncé.

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13686
Enregistré le: 08 Juin 2006, 08:55

Re: Programme de construction Python géométrie

par mathelot » 02 Jan 2022, 18:29

@catamat: ce qui est super dans ce que tu proposes, c'est que ça suit fidelement une construction à la règle graduée , au compas et au rapporteur que pourrait effectuer un élève. Ceçi écrit, c'est @françoisdesantilles qui a choisi Python. J'ai fait les calculs, avec les outils "théorème d'Al-kashi, loi des sinus et fonctions trigo sin(),cos(),tan(),arccos()". Je ferai une deuxième construction sous Python en considérant un graphe connexe composé d'arêtes et de sommets.

sinon question pour y parvenir:
comment génère-t-on une image sur maths-forum de la figure dessinée sous turtle ? pour l'instant, je ne sais pas faire

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: Programme de construction Python géométrie

par fatal_error » 02 Jan 2022, 20:34

Hello,

On peut aussi avec numpy et pyplot (c'est peut-être plus pour du secondaire ? je sais pas)

Code: Tout sélectionner
import numpy as np
import matplotlib.pyplot as plt

M = np.array([0, 0])
N = np.array([np.sin(np.radians(65)), np.cos(np.radians(65))]) * (-4)
O = np.array([N[0], N[1] + 5])

def rotate (angle, point):
  return np.dot([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]], point)

# calcul de P: on va rotater O autour de M d'angle pi / 2
d_MP = 3 # on le sait, pourquoi ?
O_direction = O / np.linalg.norm(O)
P = rotate(np.radians(-90), O_direction) * 3
Q = rotate(np.radians(-60), P)
R = rotate(np.radians(-60), Q)

def plot_lines (arr):
  plt.plot(arr[:, 0], arr[:, 1])

fig = plt.figure()
plot_lines(np.array([M, N, O, M]))
plot_lines(np.array([P, M, O, P]))
plot_lines(np.array([P, Q, M, R, Q]))

plt.axis('equal')
plt.show()
fig.savefig('mfstuff.png')


Image

comment génère-t-on une image sur maths-forum de la figure dessinée sous turtle ? pour l'instant, je ne sais pas faire

@mathelot
il faut que tu sauvegardes une image
puis que tu l'upload sur un hébergeur (gratuit) comme imbb par exemple (puis que tu rajoutes le lien vers l'image ici [img ]https:/ /blabla[/img])
pour sauvegarder l'image c'est un peu la misère avec turtle :(
apparamment c'est basé sur tkinter (https://stackoverflow.com/questions/407 ... g-an-image) et tu vas récupérer un eps (si tu es manuel tu peux le convertir... vers png avec un outil genre cloudconvert ou gimp), sinon peut-être avec Pillow
https://stackoverflow.com/questions/988 ... o-an-image

edit: attention code ci-dessus incorrect, vu par mathelot :)
correction sans l'assertion (fausse) de l'angle PMQ valant 60°
Code: Tout sélectionner
import numpy as np
import matplotlib.pyplot as plt

M = np.array([0, 0])
N = np.array([np.sin(np.radians(65)), np.cos(np.radians(65))]) * (-4)
O = np.array([N[0], N[1] + 5])


def rotate(angle, point):
    return np.dot([
      [np.cos(angle), -np.sin(angle)],
      [np.sin(angle), np.cos(angle)]
    ], point)


# calcul de P: on rotate M de centre O
M_direction = -O / np.linalg.norm(O)
d_OP = np.linalg.norm(O) / np.cos(np.radians(40))
P = rotate(np.radians(40), M_direction) * d_OP + O

# calcul de Q par al-kashi
# PQ^2 = PM^2 + MQ^2 - 2PM * MQ cos(PMQ)
# PMQ = arccos(PQ^2 - PM^2 - MQ^2) / (-2PM * PQ)
angle_PMQ = np.arccos((9 - 2 * np.dot(P, P)) / (-2 * np.dot(P, P)))
Q = rotate(-angle_PMQ, P)
R = rotate(np.radians(-60), Q)


def plot_lines(arr):
    plt.plot(arr[:, 0], arr[:, 1])


fig = plt.figure()
plot_lines(np.array([M, N, O, M]))
plot_lines(np.array([P, M, O, P]))
plot_lines(np.array([P, Q, M, R, Q]))

plt.axis('equal')
plt.show()
fig.savefig('mfstuff.png')

Image
la vie est une fête :)

Françoisdesantilles
Membre Relatif
Messages: 261
Enregistré le: 20 Déc 2021, 14:15

Re: Programme de construction Python géométrie

par Françoisdesantilles » 02 Jan 2022, 23:55

Un grand merci à @mathelot et à @fatal_error , et très bonne année à vous!
Ce sont des gens comme vous qui rendent le monde meilleur, par l'entraide et la patience.
Il faut croire que parfois Cupidon est plus fort que Geronimo (la bonté et l'amour dépasse le sentiment de vengeance et la méchanceté gratuite ).
Je vais utiliser tout ce que vous m'avez envoyé dès le 6 :)

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13686
Enregistré le: 08 Juin 2006, 08:55

Re: Programme de construction Python géométrie

par mathelot » 03 Jan 2022, 01:22

bonsoir,
@fatal_error; d_MP n'est pas égale à 3, c'est d_PQ qui vaut 3. Je n'ai pas compris la définition
du point O.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: Programme de construction Python géométrie

par fatal_error » 03 Jan 2022, 07:53

elo mathelot,

d_MP oui je me suis trompé de lettres..
pour le calcul de O
j'ai arbitrairement posé M en (0,0), avec le repère (M, i, j)
Si je nomme N_p le projeté orthogonal de N sur (M, i) on a le triangle rectangle N_pNM rectangle en N_p
je calcule les cordonnées de N, et je déduis O car la composante sur i est la même (et par conséquent seule l'ordonnée contribue pour la distance 5,
d'où O_i === N_i, O_y = N_y + 5

edit: non je ne me suis pas trompé de lettres d_MP est bien égal à 3
edit2: non d_MP n'est pas égale à 3 j'ai supposé que les angles PMQ et RMQ étaient égaux, ce qui n'est pas nécessairement le cas
donc c'est pas une inattention mais bien une erreur de mon coté
la vie est une fête :)

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13686
Enregistré le: 08 Juin 2006, 08:55

Re: Programme de construction Python géométrie

par mathelot » 03 Jan 2022, 18:00

remarque: l'angle n'est pas droit.
Sa mesure en degré est approximativement 94,9° (résultat obtenu avec une relation de Chasles sur les angles orientés de vecteurs)

°

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13686
Enregistré le: 08 Juin 2006, 08:55

Re: Programme de construction Python géométrie

par mathelot » 04 Jan 2022, 02:04

on va faire un calcul avec les coordonnées des points.
Comme repère, nous prenons le point N comme origine, le vecteur et orthonormée directe.
Coordonnées des points:

N(0;0) ; M(4;0)

O(2.113091309 ; 4.531538935)

P(7.802412649 ; 1.583304387)

Q(7.867840423 ; - 1.415982063)

R(4.707643774 ; - 4.057639095)

à suivre...

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13686
Enregistré le: 08 Juin 2006, 08:55

Re: Programme de construction Python géométrie

par mathelot » 04 Jan 2022, 19:54

mathelot a écrit:Comme repère, nous prenons le point N comme origine, le vecteur et orthonormée directe.


Coordonnées des points:

N(0;0) ; M(4;0)

coordonnées du point O
NO=5
les coordonnées du point O sont les coordonnées du vecteur :




coordonnées du point P
calcul de l'angle polaire













calcul des coordonnées du point Q












Le calcul des coordonnées du point R sont laissées en exercice


calcul coordonnées de R (corrigé)








Modifié en dernier par mathelot le 06 Jan 2022, 17:06, modifié 2 fois.

 

Retourner vers ✎✎ Lycée

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 33 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite