旋转前确定拐角的原始坐标

时间:2016-04-29 06:04:00

标签: rotation trigonometry transpose

我正在进行大脑冻结,试图在旋转之前计算矩形左上角的原始坐标。

鉴于我知道矩形被旋转 n 度/弧度,我知道新 x y 坐标,我如何计算 x y )在JavaScript中使用三角函数坐标?我也知道矩形的 宽度 高度 。旋转轴是矩形的中心。

example problem

旋转的矩形为蓝色,原件为绿色。

2 个答案:

答案 0 :(得分:0)

原始 X 转置(“旋转”) Y 完全相同,反之亦然原始的 Y 就转置的 X 来自轴。

所以:

  

origX = axisX - ( axisY - transY
     origY = axisY - ( axisX - transX

答案 1 :(得分:0)

你必须围绕枢轴反转它。 (直肠的中心)

//utils
function nr(v){ return +v || 0 }

class Point{
    constructor(x,y){
        this.x = nr(x);
        this.y = nr(y);
    }

    add(pt){
        var a = this, b = Point.from(pt);
        return new Point(a.x + b.x, a.y + b.y);
    }

    subtract(pt){
        var a = this, b = Point.from(pt);
        return new Point(a.x - b.x, a.y - b.y);
    }

    rotate(radians, pivot){
        if(pivot){
            return this.subtract(pivot).rotate(radians).add(pivot);             
        }

        var r = nr(radians), c = Math.cos(r), s = Math.sin(r);
        return new Point(
            this.x * c - this.y * s,
            this.x * s + this.x * c
        );
        //return delta.matrixTransform( c, s, -s, c );
    }

    matrixTransform(a, b, c, d, tx, ty){
        return new Point(
            this.x * nr(a) + this.y * nr(c) + nr(tx),
            this.x * nr(b) + this.y * nr(d) + nr(ty)
        )
    }

    static from(pt){
        if(pt instanceof Point) return pt;
        return new Point(pt && pt.x, pt && pt.y);
    }
}

和计算:

var RAD = Math.PI/180, DEG = 180/Math.PI;

var knownPoint = new Point(100, 100);
var angle = 30*RAD;

var unrotatedRect = { width: 150, height: 100 };
//the pivot to (counter-)rotate your known point
//if you know this point, you don't have to compute it
var pivot = new Point(unrotatedRect.width/2, unrotatedRect.height/2)
    .rotate(angle)
    .add(knownPoint);

console.log(knownPoint.rotate(-angle, pivot));