2016-03-12 3 views
1

Мне нужно вычислить декартово уравнение вектора ориентации линии. Пользователь может свободно поворачивать точку зрения таким образом.Позиция линии после поворота - Swing


Точка зрения
Point of view


Точка зрения 2
Point of view 2


Было бы легко, если бы я знал две точки линии, но я не могу получить правильное положение после поворота точки, кажется, что позиция линии остается неизменной, я не совсем понимаю, как работает Rotation Graphics 2.D. Это фрагмент кода.

g3.rotate(Math.toRadians(Double.valueOf(getJtfRotationAngle().getText())) 
     ,eye.getEyePos().getX_pos() 
     ,eye.getEyePos().getY_pos()); 

g3.setColor(Color.BLACK); 

g3.draw(new Line2D.Double(eye.getEyePos().getX_pos(),eye.getEyePos().getY_pos() 
     ,eye.getEyePos().getX_pos()+25,eye.getEyePos().getY_pos())); 
g3.draw(new Line2D.Double(eye.getEyePos().getX_pos(),eye.getEyePos().getY_pos() 
     ,eye.getEyePos().getX_pos(),eye.getEyePos().getY_pos()+25)); 

//This line is the orientation vector 
g3.draw(new Line2D.Double(eye.getEyePos().getX_pos() 
     ,eye.getEyePos().getY_pos() 
     ,eye.getEyePos().getX_pos()+25 
     ,eye.getEyePos().getY_pos()+25)); 

g3.drawOval((int)eye.getEyePos().getX_pos(),(int)eye.getEyePos().getY_pos(),10,10); 
g3.fillOval((int)eye.getEyePos().getX_pos(),(int)eye.getEyePos().getY_pos(),10,10); 

eye.setEyeTruePos(new Point(eye.getEyePos().getX_pos()-x_pos/2,eye.getEyePos().getY_pos()-y_pos/2)); 

Заранее благодарим за ваш ответ/объяснение.

ответ

1

Повернуть на Graphics2D как это работает:

translate(x, y); 
rotate(theta); 
translate(-x, -y); 

Таким образом, вы применяете те же преобразования к исходной линии, чтобы получить два новых пункта:

tx=px+x; 
ty=py+y; 
rx=tx*Math.cos(a)-ty*Math.sin(a); 
ry=..... 
pnewx=rx-x; 
pnewy=ry-y; 

и то же самое для другой точки (px, py).