C++ вычисление 2 баллов на основе 2 других баллов

Итак, я делаю эту забавную маленькую игру на C++, к сожалению, я застрял на создании "радара", я застрял на этой части

пример

(РЕДАКТИРОВАТЬ, у меня уже есть A & Bединственное, чего у меня нет C & D)

Так что мне нужно сделать, это рассчитать две точки (2d vector) из C & D, они должны быть в том же месте, как на картинке, которую я сделал выше (извините, я знаю, что это плохо).

B будет вращаться вокруг A поэтому мне нужно рассчитать положение C & D основанный на том, сколько B вращается вокруг A, Я собираюсь создать треугольник (например, нарисовать линию от C в D, D в B & B в A)

A можно рассматривать как центр нижней линии треугольника, это как основа всего, все вращается вокруг Aи положение C & D должны быть рассчитаны в зависимости от того, сколько B вращается вокруг A,

Каким будет лучший способ сделать функцию 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;
}

Надеюсь, я сформулировал свой вопрос достаточно хорошо, спасибо за прочтение!

2 ответа

Решение

Вот вычисление для получения 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)};

Поскольку вы ищете повороты на 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;
Другие вопросы по тегам