计算6点贝塞尔曲线的点

时间:2014-03-26 16:11:53

标签: php imagick curve bezier

我使用PHP和imagick绘制贝塞尔曲线。我有一个函数,它将采用3 x,y坐标并返回中间的XY点,以确保曲线通过这3个点。

我想创建一个同样功能的功能,但需要6分。我不知道从哪里开始。我假设有一种数学方法来计算6点贝塞尔曲线中的4个中点。

以下是3点代码如何工作的示例:

$s1 = array("x" => $var1, "y" => 0);//start
$s2 = array("x" => $var2, "y" => $var3);
$s3 = array("x" => $var4, "y" => $var5);//end
$smp = findControlPoint($s1, $s2, $s3); 

$points = array
(
    array( 'x' => $s1['x'], 'y' => $s1['y'] ),
    array( 'x' => $smp['x'], 'y' => $smp['y'] ),
    array( 'x' => $s3['x'], 'y' => $s3['y'] ),  

);
$draw->bezier($points); 

1 个答案:

答案 0 :(得分:0)

你的问题有点令人困惑,因为你不清楚如何产生积分。然而,要使多个4点贝塞尔曲线连续超过它们的“连接”,您需要(来自Joining Multiple Bézier Curves):

  

让我们举一个例子,我们有两组积分(A1,A2,A3和&   A4和B1,B2,B3和& B4)。为了这些点创建一个   顺畅的Bézier曲线,以下两个事实必须是真的:

     
      
  • 他们必须在同一点(A4 == B1)
  • 结束   
  • A3,A4和B2必须是共线的(与A3,B1和B2必须共线相同)
  •   

你需要在每个“部分”中使用超过3个点来加入,因为3个点在每个部分的开头和结尾都没有足够的控制曲线的方向。