pythalgo
Messages postés1Date d'inscriptiondimanche 11 octobre 2009StatutMembreDernière intervention11 octobre 2009
-
11 oct. 2009 à 12:56
galgafou
Messages postés5Date d'inscriptionmardi 7 avril 2009StatutMembreDernière intervention14 décembre 2009
-
14 déc. 2009 à 18:31
Bonjour,
Quelqu'un connaitrait il un script python qui permette à partir de localisation de différents points dans l'espace(*), de trouver l'équation de la droite qui passe au plus prêt des différents points?
(*)comme par exemple
point 1 x1,y1,z1
point 2 x2,y2,z2
point 3 x3,y3,z3
le nombre de points pouvant varier.
D'avance, merci.
A voir également:
Python supprimer espace
Supprimer espace python - Meilleures réponses
Supprimer les espaces python - Meilleures réponses
Je vais aussi demander conseil à mon prof de Math pour que je comprenne un peu mieux la philosophie du développement et pouvoir écrire un petit script pour automatiser le calcul.
galgafou
Messages postés5Date d'inscriptionmardi 7 avril 2009StatutMembreDernière intervention14 décembre 2009 14 déc. 2009 à 18:31
Voici le script que tu me demandais. Je me suis dis que les internautes seront pe aussi interesse. Attention, ce programme est dédié au traitement de données provenant d'une structure texte bien précise. Il faudra le modifier pour pouvoir l'utiliser...
# -*- coding: cp1252 -*-
class Application():
def __init__(self):
"""Construction de la fenetre principale"""
# supprime les premières lignes ne comprenant pas les infos utiles
test = "FALSE"
while test == "FALSE":
if self.text[0][2] == "#":
test = "TRUE"
else:
del(self.text[0])
del(self.text[0])
# création d'une liste qui ne garde que le numero du résidu et les coordonnées X, Y et Z
text_2 = []
for cpt in range(len(self.text)):
text_2.append(self.text[cpt].split())
for htp in range(len(text_2[cpt])-4):
del(text_2[cpt][1])
self.text = text_2
self.affichage()
def affichage(self):
"""Permet l'affichage des données importées"""
self.root.geometry("500x500")
if self.launch != 0:
self.frame_2.destroy()
self.frame_4.destroy()
def calcul(self):
"""Fonction qui regroupe les points sélectionnés en vue d'en calculer la meilleure droite"""
self.points = []
for cpt in range(len(self.check)):
if self.check[cpt].get() == 1:
self.points.append(self.text[cpt])
if len(self.points) != 0:
# Création de la matrice Y:
matrice_Y = len(self.points)*[0]
for cpt in range(len(self.points)):
matrice_Y[cpt] = [float(self.points[cpt][2])]
self.Y = matrix(matrice_Y)
# Création de la matrice Z:
matrice_Z = len(self.points)*[0]
for cpt in range(len(self.points)):
matrice_Z[cpt] = [float(self.points[cpt][3])]
self.Z = matrix(matrice_Z)
# Création de la matrice X:
matrice_X = len(self.points)*[0]
matrice_Xbis = len(self.points)*[0]
for cpt in range(len(self.points)):
matrice_X[cpt] = [float(1), float(self.points[cpt][1]), float(self.points[cpt][3])]
matrice_Xbis[cpt] = [float(1), float(self.points[cpt][1]), float(self.points[cpt][2])]
self.X = matrix(matrice_X)
self.Xbis = matrix(matrice_Xbis)
self.top = Toplevel()
self.top.title("Solution")
self.top.geometry("+700+400")
self.plan_1 = modif_matrice_coeff(self.plan_1,1)
self.plan_2 = modif_matrice_coeff(self.plan_2,2)
Label(self.top, text="La droite recherchée est l'intersection des deux plans suivants :").pack()
Label(self.top, text=self.plan_1).pack()
Label(self.top, text=self.plan_2).pack()
Button(self.top, text="Fermer", command= self.top.destroy).pack()
def modif_matrice_coeff(base,test):
a = str(base[0])
b = str(base[1])
c = str(base[2])
a = a.replace("[","")
a = a.replace("]","")
b = b.replace("[","")
b = b.replace("]","")
c = c.replace("[","")
c = c.replace("]","")
if test == 1:
plan "y " + a + " + " + b + "x + " + c + "z"
if test == 2:
plan "z " + a + " + " + b + "x + " + c + "y"