python贝塞尔曲线_blenderpython在贝塞尔曲线上创建点

贝塞尔曲线由四个点绘制:两个主点(p0、p1)和两个p0_hr点(p1_hl)。

要在t的一刻向曲线添加一个额外的点p2,t从0到1变化,并表示p2点位置与曲线总长度的比率,我们需要执行以下操作:

我们必须从下边开始:p0和p1点的坐标p0_hr=p0右手柄点的坐标p1_hlp1的左手柄点坐标t比率

我们需要找到:新p2点的坐标其两个手柄点的坐标(左和右)新的p0_hr和p1_hl控制点坐标让我们将[p0,p0_hr]、[p0_hr,p1_hl]和[p1_hl,p1]的段与t1、t2和t3点沿其长度的比例t进行划分。

这些点的坐标可以通过矢量数学找到。点坐标数据是来自世界原点(0,0,0)到此点的矢量。它如何寻找t1点:

拥有原始向量(p0)和(p0_hr),我们可以找到(v1)向量作为(p0)和(p0_hr)的差值:1v1=p0_hr-p0具有t比率,我们可以获取(v2)矢量:1v2=v1*t添加(v2)和(p0)矢量为我们提供了所需的矢量(t1):1t1=v2 p0为t1合并所有:1t1=p0 (p0_hr-p0)*t同样,对于t2和t3点:12t2=p0_hr (p1_hl-p0_hr)*tt3=p1_hl (p1-p1_hl)*t我们发现t1和t3点是p0和p1的手柄点新位置的坐标。接下来,查找p2的手柄点的坐标。连接t1、t2和t2、t3点。现在,我们可以得到p2的处理点,以相同的t比率。

12p2_hl=t1 (t2-t1)*tp2_hr=t2 (t3-t2)*t它仍要查找p2点坐标。连接p2_hlp2_hr点。我们可以以相同的t比率找到所需的p2点。

1p2=p2_hl (p2_hr-p2_hl)*t

我们发现所有表达式都得到所有必要的点。现在,我们可以离开数学并编写一个函数,以查找贝塞尔曲线上具有所有必要句柄点的附加点。defnew_bezier_point(p0,p0hr,p1hl,p1,t):t1=p0 (p0hr-p0)*tt2=p0hr (p1hl-p0hr)*tt3=p1hr (p1-p1hl)*tp2hl=t1 (t2-t1)*tp2hr=t2 (t3-t2)*tp2=p2hl (p2hr-p2hl)*treturn[t1,p2hl,p2,p2hr,t3]

现在,我们可以向贝塞尔曲线添加新点,并配置所有必要点的坐标。p0co=p0.cop0hr=p0.handle_rightp1co=p1.cop1hl=p1.handle_leftnew_data=new_bezier_point(p0co,p0hr,p1hl,p1co,0.3)bpy.ops.curve.subdivide(1)p0.handle_right_type='FREE'p0.handle_right=new_data[0]p1.handle_left_type='FREE'p1.handle_left=new_data[4]p2.co=new_data[2]p2.handle_left_type='FREE'p2.handle_right_type='FREE'p2.handle_left=new_data[1]p2.handle_right=new_data[3]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值