2017-04-13 49 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)]