我使用 NURBS-python 发现了一个有趣的问题,但不确定这是故意这样做还是只是一个错误。我想用 2 个代码来介绍这个。
第一个应该与第二个输出相同,而不是。第一个成功更新了NURBS曲线的控制点并绘制了一条新曲线,
更改控制点列表的方式会影响结果。
import math
from geomdl import BSpline
from geomdl import NURBS
from geomdl import fitting
from geomdl import convert
from geomdl.visualization import VisMPL
P1=[[0, 0], [0, 1], [1, 1], [1, 0], [1, -1], [0, -1], [0, 0]]
Degree=3
CPN=5
P2=[[0, 0], [0, 1], [2, 1], [2, 0], [2, -1], [0, -1], [0, 0]]
CP=[[0, 0], [1, 2], [2, 0], [1, -2], [0, 0]]
c1=NURBS.Curve()
c1.degree=Degree
c1.ctrlpts=P1
c1.weights=[1, 1, 1, 1, 1, 1, 1]
c1.knotvector=[0, 0, 0, 0, 0.25, 0.5, 0.75, 1, 1, 1, 1]
c1.vis=VisMPL.VisCurve2D()
c1.render()
c1.ctrlpts=P2
c1.vis=VisMPL.VisCurve2D()
c1.render()
c2=convert.bspline_to_nurbs(fitting.approximate_curve(P1, Degree, ctrlpts_size=CPN))
c2.vis=VisMPL.VisCurve2D()
c2.render()
c2.ctrlpts=CP
c2.vis=VisMPL.VisCurve2D()
c2.render()
而第二个只是简单地更新控制点,曲线本身并没有改变。
import math
from geomdl import BSpline
from geomdl import NURBS
from geomdl import fitting
from geomdl import convert
from geomdl.visualization import VisMPL
P1=[[0, 0], [0, 1], [1, 1], [1, 0], [1, -1], [0, -1], [0, 0]]
Degree=3
CPN=5
P2=[[0, 0], [0, 1], [2, 1], [2, 0], [2, -1], [0, -1], [0, 0]]
CP=[[0, 0], [1, 2], [2, 0], [1, -2], [0, 0]]
c1=NURBS.Curve()
c1.degree=Degree
c1.ctrlpts=P1
c1.weights=[1, 1, 1, 1, 1, 1, 1]
c1.knotvector=[0, 0, 0, 0, 0.25, 0.5, 0.75, 1, 1, 1, 1]
c1.vis=VisMPL.VisCurve2D()
c1.render()
for i in range(len(P2)):
c1.ctrlpts[i]=P2[i]
c1.vis=VisMPL.VisCurve2D()
c1.render()
c2=convert.bspline_to_nurbs(fitting.approximate_curve(P1, Degree, ctrlpts_size=CPN))
c2.vis=VisMPL.VisCurve2D()
c2.render()
for i in range(len(CP)):
c2.ctrlpts[i]=CP[i]
c2.vis=VisMPL.VisCurve2D()
c2.render()
请帮忙,谢谢。