[PYTHON] Trouver l'intersection d'un cercle et d'une droite (matrice sympy)

(Référence) Trouvez l'intersection d'un cercle et d'une ligne droite https://qiita.com/tydesign/items/36b42465b3f5086bd0c5 (Référence) L'intersection d'un cercle et d'une ligne droite avec sympy https://qiita.com/mrrclb48z/items/2d5bd66507166913573b

Je sens que je peux le faire en une seule ligne.

Remplacez une valeur depuis le début

#[Exemple] Centre(3,2)Un cercle avec un rayon de 5 et une ligne droite 3x+2y-16=Trouvez l'intersection de 0
from sympy import *																													
var('x0 y0 r x1 y1 x2 y2 c s tx ty d sx sy')																													
x0=3																													
y0=2																													
r=5																													
y1=0																													
v=solve([3*x1+2*y1-16])																													
x1=v[x1]																													
x2=0																													
v=solve([3*x2+2*y2-16])																													
y2=v[y2]																													
d=sqrt((x1-x2)**2+(y1-y2)**2)																													
v=solve([c*0-s*0+tx-x1,s*0+c*0+ty-y1,c*d-s*0+tx-x2,s*d+c*0+ty-y2],[c,s,tx,ty])																													
A=Matrix([																													
        [v[c],-v[s],v[tx]],																													
        [v[s], v[c],v[ty]],																													
        [0   ,    0,    1]																													
])																													
B=Matrix([																													
       [x0],																													
       [y0],																													
       [ 1]																													
])																													
AinvB=A.inv()*B																													
sx=AinvB[0].subs([(c**2 + s**2,1)])																													
sy=AinvB[1].subs([(c**2 + s**2,1)])																													
																													
B=Matrix([																													
         [sx+sqrt(r**2-sy**2)],																													
         [0],																													
         [1]																													
])																													
AB=A*B																													
print(float(AB[0]),float(AB[1]))																													
B=Matrix([																													
         [sx-sqrt(r**2-sy**2)],																													
         [0],																													
         [1]																													
])																													
AB=A*B																													
print(float(AB[0]),float(AB[1]))																													
# 0.9574786408259727 6.563782038761041																													
# 6.427136743789412 -1.640705115684118																																																										

Remplacez la valeur plus tard (en construction)

#Trouvez l'intersection d'un cercle et d'une ligne droite(matrice sympy)																													
from sympy import *																													
var('x y x0 y0 r x1 y1 x2 y2 co si tx ty d sx sy a b c')																													
y1=0																													
v=solve([a*x+b*y1-c],[x])																													
x1=v[x]																													
x2=0																													
v=solve([a*x2+b*y-c],[y])																													
y2=v[y]																													
																													
d=sqrt((x1-x2)**2+(y1-y2)**2)																													
v=solve([co*0-si*0+tx-x1,si*0+co*0+ty-y1,co*d-si*0+tx-x2,si*d+co*0+ty-y2],[co,si,tx,ty])																													
A=Matrix([																												
    [v[co],-v[si],v[tx]],																													
    [v[si], v[co],v[ty]],																													
    [0    ,     0,    1]																													
])																													
B=Matrix([																													
    [x0],																													
    [y0],																													
    [ 1]																													
])																													
AinvB=A.inv()*B																													
sx=AinvB[0].subs([(co**2 + si**2,1)])																													
sy=AinvB[1].subs([(co**2 + si**2,1)])																													
																													
B=Matrix([																													
    [sx+sqrt(r**2-sy**2)],																													
    [0],																													
    [1]																													
])																													
AB=A*B																													
print(AB)																													
#Résultat omis
#Continuer

-------------- Supplément

C'est une méthode de résolution et une méthode d'intersection avec classe sans utiliser de matrice. Il y a deux manières.

stackoverflow J'ai appris du chef de famille. (Référence) sympy résoudre le cercle de la ligne d'intersection ---> pourquoi AttributeError: l'objet 'tuple' n'a pas d'attribut'subs ' https://stackoverflow.com/questions/61634904/sympy-solve-intersection-line-circle-why-attributeerror-tuple-object-has-n C'est Tuple.


#[Exemple] Centre(3,2)Un cercle avec un rayon de 5 et une ligne droite 3x+2y-16=Trouvez l'intersection de 0
from sympy import *
var('v0 x y x0 y0 r a b c')
v=solve([(x-x0)**2+(y-y0)**2-r**2,a*x+b*y+c],[x,y])
print(Tuple(*v[0]).subs({x0: 3.0, y0: 2.0, r: 5.0, a: 3.0, b: 2.0, c: -16.0}))
print(Tuple(*v[1]).subs({x0: 3.0, y0: 2.0, r: 5.0, a: 3.0, b: 2.0, c: -16.0}))
# (6.42713674378941, -1.64070511568412)

Recommended Posts

Trouver l'intersection d'un cercle et d'une droite (matrice sympy)
Je veux trouver l'intersection d'une courbe de Bézier et d'une ligne droite (méthode de découpage de Bézier)
Trouver les valeurs propres d'une vraie matrice symétrique en Python
Trouver le point de contact de la tangente commune de deux cercles (matrice sympy)
Trouvez le rang de la matrice dans le monde XOR (rang de la matrice sur F2)
[Python] Une fonction simple pour trouver les coordonnées du centre d'un cercle
Trouvez le nombre de jours dans un mois
[Python] Trouvez la matrice de translocation en notation d'inclusion
Prise en compte des forces et faiblesses de Python
Python --Lisez les données d'un fichier de données numériques et recherchez la ligne de régression multiple.
Soyez prudent lors de la différenciation des vecteurs propres d'une matrice
Trouvez la matrice Hermite et ses valeurs uniques en Python
Python --Lisez des données à partir d'un fichier de données numériques pour trouver des matrices, des valeurs propres et des vecteurs propres distribués co-distribués
[Python] Un programme pour trouver le nombre de pommes et d'oranges qui peuvent être récoltées
Découvrez la largeur apparente d'une chaîne en python
Un résumé approximatif des différences entre Windows et Linux
Comment trouver le coefficient de mise à l'échelle d'une ondelette bipolaire
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
Découvrez l'âge et le nombre de gains des gouverneurs de préfecture dans tout le pays
Trouvez la valeur optimale de la fonction à l'aide d'un algorithme génétique (partie 2)
Comment trouver l'adresse mémoire de la valeur de la trame de données Pandas
Creusez le répertoire et créez une liste de chemins de répertoire + noms de fichiers
Trouvez la distance (en tenant compte de la rondeur de la terre) de la latitude et de la longitude.
Trouvez le waypoint à partir de la latitude et de la longitude (en tenant compte de la rondeur de la terre).
Utilisez AWS lambda pour récupérer les actualités et notifier régulièrement LINE des mises à jour [python]
Trouvez la définition de la valeur de errno
L'histoire de Python et l'histoire de NaN
Risque de mélange! ndarray et matrice
Calculer l'itinéraire le plus court d'un graphe avec la méthode Dyxtra et Python
Trouvez la broche inertielle et le moment d'inertie principal à partir du tenseur inertiel avec NumPy
Retrouvez les termes généraux de la séquence de Tribonacci en algèbre linéaire et Python
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
Trouvez la valeur minimale de la fonction par la méthode d'optimisation du groupe de particules (PSO)
Créez DNN-CRF avec Chainer et reconnaissez la progression des accords de la musique
Une histoire sur le calcul de la vitesse d'une petite balle tombant tout en recevant la résistance de l'air avec Python et Sympy
Expliquez doucement le processus de création d'une simple caméra de surveillance sans serveur à l'aide de Raspeye, de l'API Gmail et de l'API Line