[PYTHON] Finden Sie den Schnittpunkt eines Kreises und einer geraden Linie (Sympymatrix)

(Referenz) Finden Sie den Schnittpunkt eines Kreises und einer geraden Linie https://qiita.com/tydesign/items/36b42465b3f5086bd0c5 (Referenz) Der Schnittpunkt eines Kreises und einer geraden Linie mit Sympy https://qiita.com/mrrclb48z/items/2d5bd66507166913573b

Ich habe das Gefühl, ich kann es in einer Zeile tun.

Ersetzen Sie einen Wert von Anfang an

#[Beispiel] Zentrum(3,2)Ein Kreis mit einem Radius von 5 und einer geraden Linie 3x+2y-16=Finden Sie den Schnittpunkt von 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																																																										

Ersetzen Sie den Wert später (im Aufbau)

#Finden Sie den Schnittpunkt eines Kreises und einer geraden Linie(Sympiematrix)																													
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)																													
#Ergebnis weggelassen
#Fortsetzen

-------------- Nachtrag

Es ist eine Lösungsmethode und eine Schnittmethode mit Klasse ohne Verwendung einer Matrix. Es gibt zwei Möglichkeiten.

Stackoverflow Ich wurde von der Oberfamilie unterrichtet. (Referenz) Sympy lösen Schnittlinienkreis ---> warum AttributeError: 'Tupel'-Objekt hat keine Attributsubs' https://stackoverflow.com/questions/61634904/sympy-solve-intersection-line-circle-why-attributeerror-tuple-object-has-n Es ist Tupel.


#[Beispiel] Zentrum(3,2)Ein Kreis mit einem Radius von 5 und einer geraden Linie 3x+2y-16=Finden Sie den Schnittpunkt von 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

Finden Sie den Schnittpunkt eines Kreises und einer geraden Linie (Sympymatrix)
Ich möchte den Schnittpunkt einer Bezier-Kurve und einer geraden Linie finden (Bezier-Clipping-Methode)
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python
Finden Sie den Berührungspunkt der gemeinsamen Tangente zweier Kreise (Sympiematrix)
Finden Sie den Rang der Matrix in der XOR-Welt (Rang der Matrix auf F2)
[Python] Eine einfache Funktion zum Ermitteln der Mittelkoordinaten eines Kreises
Finden Sie die Anzahl der Tage in einem Monat
[Python] Finden Sie die Translokationsmatrix in Einschlussnotation
Berücksichtigung der Stärken und Schwächen von Python
Python - Lesen Sie Daten aus einer numerischen Datendatei und suchen Sie die multiple Regressionslinie.
Seien Sie vorsichtig, wenn Sie die Eigenvektoren einer Matrix unterscheiden
Finden Sie die Hermite-Matrix und ihre eindeutigen Werte in Python
Python - Lesen Sie Daten aus einer numerischen Datendatei, um die verteilte, gemeinsam verteilte Matrix, Eigenwerte und Eigenvektoren zu finden
[Python] Ein Programm, um die Anzahl der Äpfel und Orangen zu ermitteln, die geerntet werden können
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Eine grobe Zusammenfassung der Unterschiede zwischen Windows und Linux
So ermitteln Sie den Skalierungskoeffizienten eines bipolaren Wavelets
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Informieren Sie sich über das Alter und die Anzahl der Gewinne von Präfekturgouverneuren im ganzen Land
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 2)
So ermitteln Sie die Speicheradresse des Pandas-Datenrahmenwerts
Durchsuchen Sie das Verzeichnis und erstellen Sie eine Liste mit Verzeichnispfaden und Dateinamen
Finden Sie die Entfernung von Breite und Länge (unter Berücksichtigung der Rundheit der Erde).
Finden Sie den Wegpunkt aus dem Breiten- und Längengrad (unter Berücksichtigung der Rundheit der Erde).
Verwenden Sie AWS Lambda, um Nachrichten zu kratzen und LINE regelmäßig über Updates zu informieren [Python]
Finden Sie die Definition des Wertes von errno
Die Geschichte von Python und die Geschichte von NaN
Mischgefahr! Ndarray und Matrix
Berechnen Sie die kürzeste Route eines Diagramms mit der Dyxtra-Methode und Python
Ermitteln Sie mit NumPy die Trägheitsspindel und das Hauptträgheitsmoment aus dem Trägheitstensor
Finden Sie die allgemeinen Begriffe der Tribonacci-Sequenz in linearer Algebra und Python
Die Geschichte einer Soundkamera mit Touch Designer und ReSpeaker
Ermitteln Sie den Mindestwert der Funktion mithilfe der Partikelgruppenoptimierungsmethode (PSO).
Erstellen Sie DNN-CRF mit Chainer und erkennen Sie den Akkordfortschritt der Musik
Eine Geschichte über die Berechnung der Geschwindigkeit eines kleinen Balls, der mit Python und Sympy beim Luftwiderstand fällt
Erklären Sie vorsichtig den Prozess der Erstellung einer einfachen Überwachungskamera ohne Server mithilfe von Raspeye, Gmail API und Line API