Я хочу, чтобы квадрат (представленный head
) всегда был лицом к мыши (представлен Mouse
- да, это LWJGL). У меня немного проблемы на самом деле получить его к лицу torward мыши, потому что я использую glRotatef(angle)
, которыйПоиск угла с использованием трех точек
- Требует градусов, в то время как большинство Java
Math
функции включают радиан - трудно сделать, так как я нет способа узнать, как далеко я должен вращаться, чтобы указать к мыши
я взбитыми следующий Java-код, который предполагает, что 0 градусов не прямо:
double mx = Mouse.getX();
double my = Mouse.getY();
double rx = head.x;
double ry = head.y + 1;
double vx = head.x;
double vy = head.y;
double mtor = Math.sqrt(Math.pow(mx + rx, 2) + Math.pow(my + ry, 2));
double mtov = Math.sqrt(Math.pow(mx + vx, 2) + Math.pow(my + vy, 2));
double rtov = Math.sqrt(Math.pow(rx + vx, 2) + Math.pow(ry + vy, 2));
double rotate = Math.toDegrees(Math.acos((Math.pow(mtov, 2) + Math.pow(rtov, 2) - Math.pow(mtor, 2))/(2*mtov*rtov))));
Однако, это создает некоторые странные результаты:
(сторона с белыми квадратами фронт. Для полного альбома перейти к http://imgur.com/a/4DwFg)
Вот некоторые консоли вывода:
Mouse X: 555.0
Mouse Y: 439.0
Reference X: 400.0
Reference Y: 301.0
Vertex X: 400.0
Vertex Y: 300.0
Rotation: 65.56236879269605
Mouse X: 552.0
Mouse Y: 440.0
Reference X: 400.0
Reference Y: 301.0
Vertex X: 400.0
Vertex Y: 300.0
Rotation: 65.5244609346555
Итак, что я делаю неправильно? (Дополнительный кредит: есть ли лучший способ сделать это в openGL?)
Дайте мне знать, если у вас есть вопросы по поводу того, что я делаю. – maybeWeCouldStealAVan
Это всегда возвращает значение -45 или 135. –
Возможно, вы имели в виду: 'double dy = (my-vy);'? Он работает, если я это сделаю. Спасибо! –