求解旋转矩形上的点

时间:2014-05-01 21:43:23

标签: actionscript-3 geometry rectangles

我在AS3工作。

我有一个通用矩形。此矩形可以具有任何长度,任何宽度和任何旋转。我正在尝试解决矩形四个角的x和y坐标。我知道矩形中心的坐标,我知道它的宽度,高度,最高点和最低点之间的距离以及最左边和最远点之间的x距离以及知道旋转。

我的代码目前看起来像这样(对象当然是有问题的矩形,请记住,当我应用它时,它可以有任何尺寸 - 这只是一种可能性。初始宽度和高度是实际长度和宽度,而后面引用的宽度和高度是最高点和最低点之间的x和y距离以及最左边和最远的点,旋转当然是旋转,x和y是对象的中心坐标。)

import flash.events.Event;
addEventListener(Event.ENTER_FRAME, Rotate, false, 0, true);

var Radius:Number = Math.sqrt(((Object.height / 2) * (Object.height / 2)) + ((Object.width / 2) * (Object.width / 2)));

function Rotate(event:Event)
{

    Object.rotation += 1;
    Marker1.x = Math.sqrt((Radius * Radius) - ((Object.height / 2) * (Object.height / 2))) + Object.x;
    Marker2.x = - Math.sqrt((Radius * Radius) - ((Object.height / 2) * (Object.height / 2))) + Object.x;
    Marker3.y = Math.sqrt((Radius * Radius) - ((Object.width / 2) * (Object.width / 2))) + Object.y;
    Marker4.y = - Math.sqrt((Radius * Radius) - ((Object.width / 2) * (Object.width / 2))) + Object.y;

    Marker1.y = Object.y + (Object.height / 2);
    Marker2.y = Object.y - (Object.height / 2);
    Marker3.x = Object.x + (Object.width / 2);
    Marker4.x = Object.x - (Object.width / 2);

}

正如您所看到的,我正在尝试使用圆形几何体在矩形的角落放置四个小圆圈(标记1-4),仅用于测试目的以确认我已收集了正确的坐标。问题是,坐标将始终放在+ x和+ y或-x和-y中,但不会放在图形的其他两个象限中。我无法想出一个简单的方法来动态模拟程序中二次方程的+ - 。有没有人知道如何找到这四个点以及矩形的长度,宽度和旋转?

1 个答案:

答案 0 :(得分:1)

如果您将角点的坐标表示为距矩形中点的偏移,您可以轻松地逆时针旋转角度θ

dx'= dx×cosθ - dy×sinθ
dy'= dx×sinθ+ dy×cosθ

然后,您可以将旋转的偏移添加到中点以恢复角的新坐标。