2017-01-11 10 views
1

Я делаю небольшую игру, и теперь я работаю над «радаром». Теперь для этого мне нужно найти два балла, исходя из того, насколько точка повернулась вокруг центральной точки.Найти 2 балла, исходя из того, насколько точка повернулась вокруг центральной точки

image

A собирается вращаться вокруг C.

В A вращается вокруг C, B & D будет двигаться вместе с A и остаться в одних и тех же «позициях», основанных от того, где находится A.

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

image

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

Как я найти B & D основаны от того, сколько A поворачивается вокруг C?

Я бы образ окончательный математика будет выглядеть примерно так:

float * returnB(float * APoint, float * CPoint) 
{ 
    float B_Out[2]; 
    //calculate where B is based off A & C 
    B_Out[0] = B_X; 
    B_Out[1] = B_Y; 
    return B_Out; 
} 

float B[2]; 
B[0] = returnB(A,C)[0]; 
B[1] = returnB(A,C)[1]; 

float * returnD(float * APoint, float * CPoint) 
{ 
    float D_Out[2]; 
    //calculate where D is based off A & C 
    D_Out[0] = D_X; 
    D_Out[1] = D_Y; 
    return D_Out; 
} 

float D[2]; 
D[0] = returnD(A,C)[0]; 
D[1] = returnD(A,C)[1]; 
+0

http://stackoverflow.com/questions/2259476/rotating-a-point-about-another-point-2d – SingerOfTheFall

+0

Знаете ли вы, на какой угол A вращается вокруг C? – acraig5075

ответ

1

Таким образом, вы знаете, относительное положение 2d уважать к C. Допустим, что (ах, ау).

Если перекрестное произведение (0,0,1) с (ах, ау, 0) вы найдете относительное положение D, что будет что-то вроде (Dx, Dy, 0)

д = (дх , ау) является относительным положение D. б также -d

https://en.wikipedia.org/wiki/Cross_product

4

Вы можете вращать точку (x, y) вокруг начала координат, выполняя простое умножение матриц, что дает следующие уравнения для преобразованной точки (x0, y0) :

x0 = x * cos(theta) - y * sin(theta); 
y0 = x * sin(theta) + y * cos(theta);