您的位置:首页 > 其它

已知圆弧上两点坐标及圆半径,计算圆心坐标

2016-10-11 13:36 2683 查看
已知圆弧上两点坐标及圆半径,计算圆心坐标的JavaScript脚本代码 ,参考http://www.cnblogs.com/lhuan/p/5753847.html

//
//
//  由圆弧上两点坐标及圆半径,计算圆心坐标的JavaScript脚本代码
//  参考http://www.cnblogs.com/lhuan/p/5753847.html
//

function Y_Coordinates(  x,  y,  k,  x0)
{
return k * x0 - k * x + y;
}

function calCircleCenter( p1, p2, r )
{
var k = 0.0,k_verticle = 0.0;
var mid_x = 0.0,mid_y = 0.0;
var a = 1.0;
var b = 1.0;
var c = 1.0;
var center1 = new Array();
var center2 = new Array();

k = (p2[1] - p1[1]) / (p2[0] - p1[0]);

if(k == 0)
{
center1[0] = (p1[0] + p2[0]) / 2.0;
center2[0] = (p1[0] + p2[0]) / 2.0;
center1[1] = p1[1] + Math.sqrt(r * r -(p1[0] - p2[0]) * (p1[0] - p2[0]) / 4.0);
center2[1] = p2[1] - Math.sqrt(r * r -(p1[0] - p2[0]) * (p1[0] - p2[0]) / 4.0);
}
else
{
k_verticle = -1.0 / k;
mid_x = (p1[0] + p2[0]) / 2.0;
mid_y = (p1[1] + p2[1]) / 2.0;
a = 1.0 + k_verticle * k_verticle;
b = -2 * mid_x - k_verticle * k_verticle * (p1[0] + p2[0]);
c = mid_x * mid_x + k_verticle * k_verticle * (p1[0] + p2[0]) * (p1[0] + p2[0]) / 4.0 -
(r * r - ((mid_x - p1[0]) * (mid_x - p1[0]) + (mid_y - p1[1]) * (mid_y - p1[1])));

center1[0] = (-1.0 * b + Math.sqrt(b * b -4 * a * c)) / (2 * a);
center2[0] = (-1.0 * b - Math.sqrt(b * b -4 * a * c)) / (2 * a);
center1[1] = Y_Coordinates(mid_x,mid_y,k_verticle,center1[0]);
center2[1] = Y_Coordinates(mid_x,mid_y,k_verticle,center2[0]);
}

console.log( center1[0] +  "    " + center1[1] );
console.log( center2[0] + "    " + center2[1] );

}


样例

var point1 = [40, 0] ;

var point2 = [0, 40 ] ;

var radius = 40

calCircleCenter( point1, point2, radius )


References

Bezier.js https://github.com/Pomax/bezierjs
A node.js and client-side library for (quadratic and cubic) Bezier curve work.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: