2015-10-05 50 views
1

上我想绘制曲线并附加一个目的是它。是否有可能创建分数(从0.0到1.0),这使得我的对象在路径上移动?当分数为0时,对象处于开始位置,当0.5处于中途时,最后是1.0时,对象处于末尾。当然,我想要一个弯曲的路径,而不是一条直线:)是否可以在PaintCode中完成?PaintCode - 移动对象的路径

+0

不知道,如果是要问,虽然在正确的地方,但我已经试过相同,得出的结论:没有,这是不可能的内PaintCode。 – Leandros

+0

这是一种编程语言,所以完全有可能,但你错过了重要的信息。沿着路径的速度应该是线性的,基于物理的还是“无论”?因为你这个标记与“贝塞尔”,这是一个完全非线性曲线:对象一起贝塞尔曲线的移动将这样做相当快沿直线段,减缓成正比的路径弯曲。虽然参数=距离值0 = 0%,0.5 = 50%和1 = 100%根据定义是正确的,但其他参数=距离值对贝塞尔曲线来说都不是真的,所以只给出这三个值是不够的。 –

+0

但我不需要动画。我想使用它作为一个可见的进度条:)只是想设置值0.5,有我在贝塞尔 –

回答

0

基于这样的事实,你要沿着曲线行走使用的直线距离,事贝塞尔曲线是可怕的,你需要建立线性映射你自己。这很简单,但:

当你绘制曲线时,也建立一个查找表,例如100点(t = 0,t = 0.01,t = 0.02等)对曲线进行一次采样。在伪代码:

lut = []; 
lut[0] = 0; 
tlen = curve.length(); 
for(v=0; v<=100; v++) { 
    t = v/100; 
    clen = curve.split(0,t).length(); 
    percent = 100*clen/tlen; 
    lut[percent] = t; 
} 

这可能会留下空白,你的LUT - 您可以修复这些作为辅助步骤或刚刚离开他们,做你的阵列上的二进制扫描,找到最近的“具有值“百分比。然后,当你需要以某个百分比值显示你的进度时,你只需要查找相应的t值:假设你需要显示83%,你可以查找lut[83],并以你提供的值绘制你的对象。

2

如果您只需要作为进度条,则可能在PaintCode中。诀窍是用虚线行程非常大的差距然后只需更改短跑

Example

然后,只需连接一个变量,你做。


编辑:关于在原来的职位讨论,该解决方案使用为单位,所以它会沿着曲线平均分配,无论怎样弯曲的贝塞尔是。