0

好的,所以我正在用 C++ 制作这个有趣的小游戏,不幸的是我一直在制作“雷达”,我被困在这部分

例子

(编辑,我已经有A& B,我唯一没有的是C& D

所以我需要做的是计算&的两点 ( 2d vector) ,它们需要像我在上面显示的 lil pic 中所示的位置(对不起,我知道这很糟糕)。CD

B将旋转,所以我需要根据旋转了多少A来计算C&的位置。我要创建一个三角形(例如从to 、to & to画一条线)DBACDDBBA

A可以认为是三角形底线的中心,这就像一切的底,一切都在旋转A,而C&的位置需要根据旋转D了多少来计算。BA

为这个计算创建一个 lil 函数的最佳方法是什么?例如

inline float returnDPoint(float A, float B)
{
    float dPoint;
    //calculate point of D based off A & B
    return dPoint;
}


inline float returnCPoint(float A, float B)
{
    float cPoint;
    //calculate point of C based off A & B
    return cPoint;
}

希望我的问题措辞足够好,感谢阅读!

4

2 回答 2

1

这是获得 C 的计算:

auto angle = atan2(b.y-a.y,b.x-a.x) + pi/2.0;
auto radius = sqrt((b.y-a.y)*(b.y-a.y)+(b.x-a.x)*(b.x-a.x));
Point C {a.x + radius * cos(angle), a.y +radius * sin(angle)};
于 2016-11-24T16:21:40.937 回答
1

由于您正在寻找 90° 的旋转,因此您不需要使用昂贵的函数,例如atan2,sqrt等。一个简单的替代方法是:

diffx = bx - ax;
diffy = by - ay;

cx = ax - diffy = ax - by + ay;
cy = ay + diffx = ay + bx - ax;

dx = ax + diffy = ax + by - ay;
dy = ay - diffx = ay - bx + ax;
于 2016-11-24T16:55:42.017 回答