2017-04-13 47 views
1

我有python代碼來創建一個貝塞爾曲線,從中我創建一個貝塞爾路徑。如何從svgpathtools貝塞爾曲線獲取座標列表?

這裏是我的進口:

import from svgpathtools import Path, Line, CubicBezier 

這裏是我的代碼:

bezier_curve = CubicBezier(start_coordinate, control_point_1, control_point_2, end_coordinate) 
    bezier_path = Path(bezier_curve) 

我想創建座標構成這個曲線的名單,但沒有一個documentation我的閱讀給出了一個簡單的方法來做到這一點。 bezier_curve和bezier_path只有起點,終點和控制點的參數。

+0

你是什麼意思「的座標,使這項曲線」? 'bezier_curve.bpoints()'會返回元組'(start_coordinate,control_point_1,control_point_2,end_coordinate)',但這聽起來並不是你想要的。貝齊爾曲線是多項式,例如,三次貝塞爾曲線完全由其四個係數決定。 欲瞭解更多信息,請參閱: https://en.wikipedia.org/wiki/B%C3%A9zier_curve#Cubic_B.C3.A9zier_curves – AndyP

回答

2

似乎是一個非常合理的問題。驚訝沒有答案。我最近不得不親自做這件事,祕密是point()

這裏是我是怎麼完成它,用你的樣板作爲起點:

from svgpathtools import Path, Line, CubicBezier 

bezier_curve = CubicBezier(start=(300+100j), control1=(100+100j), control2=(200+200j), end=(200+300j)) 
bezier_path = Path(bezier_curve) 

NUM_SAMPLES = 10 

myPath = [] 
for i in range(NUM_SAMPLES): 
    myPath.append(bezier_path.point(i/(NUM_SAMPLES-1))) 

print(myPath) 

輸出:

[(300+100j), (243.8957475994513+103.56652949245542j), (206.72153635116598+113.71742112482853j), (185.1851851851852+129.62962962962962j), (175.99451303155004+150.480109739369j), (175.85733882030178+175.44581618655695j), (181.4814814814815+203.7037037037037j), (189.57475994513032+234.43072702331963j), (196.84499314128942+266.8038408779149j), (200+300j)]