Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取贝塞尔曲线一半长度的坐标_Javascript_Html_Canvas_Bezier - Fatal编程技术网

Javascript 获取贝塞尔曲线一半长度的坐标

Javascript 获取贝塞尔曲线一半长度的坐标,javascript,html,canvas,bezier,Javascript,Html,Canvas,Bezier,我有一个椭圆,它是用4条贝塞尔曲线绘制的 我想在每条贝塞尔曲线上画一个点 该点应在Bezier曲线的长度的中间(Bezier曲线长度的一半)。< /P> 我如何得到这些点的坐标 有没有一个公式或算法可以做到这一点 我的解决方案也不是@Mike'Pomax'Kamermans强调的真正的省略号,而是类似于贝塞尔曲线的省略号。如果half表示底部曲线长度的3:1分割点(而不是与轴成45度角),则使用ctx和@ivan kuckir的解决方案如下: 函数插值(a,b,frac){ var nx=a.

我有一个椭圆,它是用4条贝塞尔曲线绘制的

我想在每条贝塞尔曲线上画一个点

该点应在Bezier曲线的长度的中间(Bezier曲线长度的一半)。< /P> 我如何得到这些点的坐标

有没有一个公式或算法可以做到这一点


我的解决方案也不是@Mike'Pomax'Kamermans强调的真正的省略号,而是类似于贝塞尔曲线的省略号。如果half表示底部曲线长度的3:1分割点(而不是与轴成45度角),则使用ctx和@ivan kuckir的解决方案如下:

函数插值(a,b,frac){
var nx=a.x+(b.x-a.x)*分形;
var ny=a.y+(b.y-a.y)*分形;
返回{x:nx,y:ny};
}
贝齐尔函数(cp1、cp2、cp3、cp4、frac){
var p1=插值(cp1、cp2、分形);
var p2=插值(cp2,cp3,分形);
var p3=插值(cp3,cp4,分形);
var p4=插值(p1,p2,分形);
var p5=插值(p2,p3,分形);
var p6=插值(p4,p5,分形);
返回p6;
}
//省略号bezier的控制点
var cp1={x:0,y:50};
var cp2={x:0,y:100};
var cp3={x:200,y:100};
var cp4={x:200,y:50};
var cp5={x:200,y:0};
var cp6={x:0,y:0};
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
ctx.beginPath();
//下半曲线
ctx.moveTo(cp1.x,cp1.y);
ctx.bezierCurveTo(cp2.x,cp2.y,cp3.x,cp3.y,cp4.x,cp4.y);
//上半曲线
ctx.moveTo(cp4.x,cp4.y);
贝塞尔曲线(cp5.x,cp5.y,cp6.x,cp6.y,cp1.x,cp1.y);
ctx.stroke();
//画红点
var divPoint=getDivisionPointOfBezier(cp1,cp2,cp3,cp4,0.75);
ctx.beginPath();
ctx.fillStyle='红色';
ctx.arc(divPoint.x,divPoint.y,5,0,2*Math.PI);
ctx.fill()


可能重复:。我的问题可能重复的不是画贝塞尔曲线,而是找出贝塞尔曲线中心的坐标这是一道数学题。您希望在应用程序中使用它这一事实与此无关。只要用谷歌搜索这个问题本身,如果你需要帮助,就可以用Javascript(一旦你知道怎么做)回来。我投票把这个问题作为离题题来结束,因为找到这些公式的艺术有一个家