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;