多边形围绕椭圆圆周的旋转点

时间:2014-02-16 08:36:27

标签: java geometry mouseevent graphics2d

我有一个2 ellipse'的设计和多边形三角形,如图所示:

enter image description here

当我拖动“手臂”时,点会随之移动。当我移动手臂时我遇到的问题是,当三角形的第三个点接近与 P1 P2 相同的Y轴时,三角形变得更加平滑,由于P1和P2没有移动的事实。

getPivot()存储大椭圆的中心坐标。我想要实现的是基于 P3 是指来自getPivot()的x轴上是否正或多或少,P1和P2应相应围绕中心旋转以保持三角形的比例

所以理论上如果我要将手臂向右移动,p1应向下旋转,P2应按比例向上旋转,但我似乎无法让P1移动。

我想要得到的主要是P1和P2围绕getPivot()(Point)。 以下是我在拖动手臂时试图旋转P1的内容:

    _angle = _degree * (Math.PI / 180);

    double cosTheta = Math.cos(_angle);
    double sinTheta = Math.sin(_angle);

    int rX1 = (int) ( cosTheta * (_xPoints[0] - getPivot().x) - 
            sinTheta * (_yPoints[0] - getPivot().y) + getPivot().x);
    int rY1 = (int) ( sinTheta * (_xPoints[0] - getPivot().x) + 
            cosTheta * (_yPoints[0] - getPivot().y) + getPivot().y);

    _xPoints[0] = rX1;
    _yPoints[0] = rY1;
    _degree++;

1 个答案:

答案 0 :(得分:0)

让我们的手臂中心点是A,C = getPivot(),R =大圆的半径

载体AC = C-A =(C.X-A.X,C.Y-A.Y)

垂直向量CP =( - AC.Y,AC.X)

归一化(单位)向量cp = CP / | CP | (将矢量除以它的长度)

CP1 = cp * R,CP2 = -cp * R

P1 = C + cp * R,P2 = C-cp * R