日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python用函数绘制椭圆_python - 如何使用python从3个点找到椭圆的方程 - SO中文参考 - www.soinside.com...

發(fā)布時間:2025/3/20 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python用函数绘制椭圆_python - 如何使用python从3个点找到椭圆的方程 - SO中文参考 - www.soinside.com... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

聽起來很有趣!如果您的3個點擊點位于同一象限中,則由這些點定義的三角形的一個角度必須是鈍角。調(diào)用B和其他兩個頂點A和C. x-y定向橢圓的一般方程中有4個參數(shù)。將A,B和C的x和y坐標代入橢圓方程將給出三個方程。你需要拿出第4個。您可以自由選擇在游戲環(huán)境中有意義的第四點。這是一個SymPy代碼片段,它根據(jù)A,B和C以及參數(shù)“f”將x值分配給橢圓的中心。

def e3(p1, p2, p3, f):

t = Triangle(p1, p2, p3)

a = t.angles

for p in a:

if a[p] > pi/2:

break

else:

return

while p != p2:

p1, p2, p3 = p2, p3, p1

pts = A, B, C = p1, p2, p3

# perpendicular line to AB passing through A

perp = Segment(A, B).perpendicular_line(A)

# intersection between that and the perpendicular to that

# which passes through C

m = perp.perpendicular_line(C).intersection(perp)[0]

delta = m - A

c = A + delta*f

x, y, h, r, y0 = symbols('x y h r y0', cls=Dummy)

eq = Ellipse((c.x, y0), h, r).equation(x, y)

s = solve([

eq.xreplace(dict(zip((x, y), p))) for p in pts], dict=True)[0]

return eq.subs(s) # for desmos graphing: str(eq.subs(s)).replace('**','^').replace('_','')+'=0'

f = .125,.25,.5,1,2的一些結果顯示在desmos。

您可以看到他們都通過您提供的要點作為示例。紅色圓圈提供了一個有趣的參考點。您可能想要選擇一個f,因此橢圓的最終寬度是圓的直徑的一小部分,它將通過這些點。

然而,橢圓經(jīng)過的點不在每個橢圓的相同象限中。要滿足該標準,您必須考慮“離軸”橢圓。使用here發(fā)布的任意橢圓方程可能也會有所幫助,以指導您在定義橢圓時選擇要控制的變量。

為了使方程盡可能簡單地求解和確定,如果該角度產(chǎn)生銳角,則可以使軸穿過第二個點擊點,否則通過第1和第3點。這是代碼證明:

def e3(A, B, C, n=7):

'''Return centered at the midpoint of A and C with the axis going through B if the angle at B is acute, else going through A and C.

'''

from sympy import Line

xc, yc = ctr = (A + C)/2

AC = A.distance(C)

smalls = True

if AC >= B.distance(A) and AC >= B.distance(C):

s = Line(A, C).slope

M2 = ctr.distance(A)**2

b = B

if abs(s) <= 1:

m2 = -M2*(s*(b.x - xc) - b.y + yc)**2/(

-M2*(s**2 + 1) + (s*(b.y - yc) + b.x - xc)**2)

else:

s = 1/s

m2 = M2*(s*(b.y - yc) - b.x + xc)**2/(

M2*(s**2 + 1) - (s*(b.x - xc) + b.y - yc)**2)

smalls = False

else:

s = Line(B, ctr).slope

M2 = ctr.distance(B)**2

p = A # or C

if abs(s) <= 1:

m2 = -M2*(s*(p.x - xc) - p.y + yc)**2/(

-M2*(s**2 + 1) + (s*(p.y - yc) + p.x - xc)**2)

else:

s = 1/s

m2 = M2*(s*(p.y - yc) - p.x + xc)**2/(

M2*(s**2 + 1) - (s*(p.x - xc) + p.y - yc)**2)

smalls = False

if smalls:

el = -1 + (-s*(x - xc) + y - yc)**2/(m2*(s**2 + 1)) + (

s*(y - yc) + x - xc)**2/(M2*(s**2 + 1))

else:

el = (M2*(s**2 + 1)*(-m2*(s**2 + 1) + (s*(y - yc) - x + xc)**2

) + m2*(s**2 + 1)*(s*(x - xc) + y - yc)**2)/(

M2*m2*(s**2 + 1)**2)

return el.expand().n(n=n)

from sympy import Point

a,b,c = Point(7/5, 12/5), Point(3/2, 5/2), Point(19/10, 3/2)

e3(a,b,c)

e3(b,c,a)

e3(c,a,b)

根據(jù)第二個單擊點,您將獲得1或3個省略號:

總結

以上是生活随笔為你收集整理的python用函数绘制椭圆_python - 如何使用python从3个点找到椭圆的方程 - SO中文参考 - www.soinside.com...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。