基点から任意の角度、距離にある座標位置を取得します。角度を連続して変化させると円軌道の座標を取得することができます。

 

function getMovingPoint(basePoint, angle, distance) {
    var x, y;
    x = distance * Math.sin(angle / 180 * Math.PI) + basePoint[1];
    y = distance * Math.cos(angle / 180 * Math.PI) + basePoint[0];
    return [x, y];
}

 

<引数>

basePoint: 基点 [x, y]

angle: 垂直を0度とする時計回りの角度(0~360)

distance: 距離

 

<例>

var res = getMovingPoint([0, 0], 300, 100); //≒[-86.603, 50]

 

上記の関数では90度、180度、270度で、本来はゼロであるべき座標の数値が「0.0000...x」のようになってしまいます。誤差としては妥当な値ですが垂直水平にきれいな数字を期待する場合、小数点を丸める「みなし処理」を加えたほうがよいかもしれません。

function getMovingPoint(basePoint, angle, distance, fp) {
    //fp: 小数点の桁数
    var x, y;
    x = distance * Math.sin(angle / 180 * Math.PI) + basePoint[1];
    y = distance * Math.cos(angle / 180 * Math.PI) + basePoint[0];
    //小数点処理
    fp = fp ? fp : 0;
    var n = Math.pow(10, fp);
    x = Math.round(x * n) / n; //四捨五入
    y = Math.round(y * n) / n; //四捨五入
    return [x, y];
}

var res = getMovingPoint([0, 0], 90, 100, 3); //[100, 6.123233995736766e-15] >> [100, 0]

 

 

 

Joomla templates by a4joomla