我有線和圓模型(我知道使用資料形成的方程)。我想找到與我的直線和圓相切的黃色圓(半徑由我確定)的切點或方程。
一開始我試圖分別求解互方程線和黃色圓圈和圓圈和黃色圓圈減少到3方程到2方程但我找不到解決方案可能計算錯誤。
有沒有更明確的方法或意見可以通過 python 找到這些點?
例如:
圓 1: (x-8,98)^2 (y-42,53)^2 = 6,4^2
第 1 行: y=22,904x-115,9707
切圓: (xa)^2 (yb)^2 = 14^2
切點(創建于 AutoCAD 中):
X1=6,2028 Y1=26,0978
X2=12,4953 Y2=37,1832

uj5u.com熱心網友回復:
您的問題有多種解決方案。
你有6 個未知數,所以解決問題的最簡單方法(不一定是最快的)是使用定義的約束來制作6 個方程。之后,您可以使用 Sympy 等符號數學引擎來求解方程組。
讓我們從定義方程開始。
- 我們知道P1 和第二個圓的中心之間的 line-2(它的中心以下記為 (x_a2, ya_2))垂直于斜率等于 a 的 line-1。所以垂線2 的斜率等于 -1/a。由于A2 和 P1 在 line-2,我們有以下

- P1 在圓 2 上,所以

- P1 在第 1 行,所以

- 我們知道兩個圓的中心之間的歐幾里得距離等于r1 r2,所以

- P2 在第 1 圈,

- P2 在第 2 圈,

我們終于有了 6 個方程,所以我們可以使用 Sympy 來求解方程組。
我建議在 Jupyter 筆記本上運行以下代碼
#%%
#imports
import sympy as sp
from sympy import Eq
from sympy.physics.mechanics import dynamicsymbols
from sympy.physics.vector import init_vprinting
init_vprinting(use_latex='mathjax', pretty_print=False)
#%%
#Unknows and variables definition
x_a1, y_a1, r_1, r_2, a, b = 8.98, 42.53, 6.4, 14, 22.904, -115.97
x_a2, y_a2, x_p1, y_p1, x_p2, y_p2 = dynamicsymbols('x_a2 y_a2 x_p1 y_p1 x_p2 y_p2')
#%%
#equations definition
eq1 = Eq(y_p1-y_a2,(1/a)*(x_a2-x_p1))
eq2 = Eq((x_p1-x_a2)**2 (y_p1-y_a2)**2,r_2**2)
eq3 = Eq(y_p1, a * x_p1 b)
eq4 = Eq((x_a2-x_a1)**2 (y_a2-y_a1)**2,(r_1 r_2)**2)
eq5 = Eq((x_p2-x_a1)**2 (y_p2-y_a1)**2,r_1**2)
eq6 = Eq((x_p2-x_a2)**2 (y_p2-y_a2)**2,r_2**2)
eq4 = sp.expand(eq4)
eq5 = sp.expand(eq5)
#%%
#solve the system
sp.solve((eq1,eq2,eq3,eq4,eq5,eq6), (x_a2, y_a2, x_p1, y_p1, x_p2, y_p2))
這是我得到的解決方案(按此順序:[x_a2,y_a2,x_p1,y_p1,x_p2,y_p2]),
[(-7.61137900888098,30.6604531432888,6.37529636566885,30.0497879592794,3.77486148740989,38.8062205939729),(-6.51375646949495,55.8003997853864,7.47291890505488,55.1897346013771,4.11921365662903,46.6932626777683),(20.1893606892033,25.4856392628135,6.20268531465346,26.0963044468229,12.496662177005,37.1827495726474),(21.6322053306201,58.5325529298243, 7.64552995607028, 59.1432181138336, 12.9493193194102, 47.5504087622978)]
第三種解決方案是 AutoCAD 給出的解決方案(以及您圖中表示的解決方案)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/421394.html
標籤:
上一篇:使用Javascript(無jQuery)僅在一定時間內運行函式
下一篇:如何比較兩條折線是否相等?
