0

我已经对从某个点和问题中以某个角度旋转一个点进行了一些调查:C++:围绕某个点旋转一个向量到目前为止我已经想出了以下方法,但它没有给我正确的结果,有人可以识别吗问题

const float angle = -90.0;
const float degreePerRadian = 57.2957795;
const float s = sin(angle / degreePerRadian);
const float c = cos(angle / degreePerRadian);
int p1x = 320;
int p1y = 480;
int p2x = 320;
int p2y = 320;

float centerX = (p2x - p1x) / 2 + p1x;
float centerY = (p2y - p1y) / 2 + p1y;
p2x -= centerX;
p2y -= centerY;
double newX = centerX + (p2x * c - p2y * s);
double newY = centerY + (p2x * s + p2y * c);

我得到:newX = 240 和 newY = 400

编辑:虽然我有一架奇怪的飞机

                                |
                                |    ^
                                |    |
                                |
       -------> ^ (320, 480)    |   (y+)
            90° |               |    |
                |               |    |
                |               |
                . (320, 320)    |
                                |
                                |
      --------------------------(0,0)
                <-- (x+) --

如果我想找出点 (320, 480) 的 90 度角,如果线落在左边和右边

事实上,更准确地说,平原是颠倒的(基本上我使用的是 QGraphicsScene,所以左上角是 0,0,右下角是宽度(),高度()

                (x+) --->
     (0,0) --------------------------
     |
     |
     |      . (320, 320)
     |      |
     |      |
     |      | 90°
     |      . (320, 480)----------
     |
     |
(y+) |
     |
     |
4

1 回答 1

1

您链接中的第 16 行代码不正确。它应该是:

双newY = centerY + (p2x * s + p2y * c);

于 2013-02-27T11:49:16.840 回答