Java:如何以45度或零度等角度绘制直线?

时间:2016-05-02 05:31:11

标签: java math line angle radians

我一直在研究分形,并决定试一试,但立即遇到了一个更简单的问题。我不能以0,45,90等任何角度画一条线。

问题: 我的角度是一个整数,我使用Math.toRadians(角度)来计算角度本身作为绘制的角度。当我绘制线条时,我必须将(int)转换为Math.toRadians()生成的double,这会导致我自己失去角度,我相信是阻止线条被绘制的。

我正在使用的代码:`

    Graphics2D g2d = (Graphics2D) g;

    int angle = 90; 

    int startX = getWidth()/2;
    int startY = getHeight()/2;
    int length = 100;

    int endX = startX + (int)Math.cos(Math.toRadians(angle)) * length;
    int endY = startY + (int)Math.sin(Math.toRadians(angle)) * length;

    g2d.drawLine(startX, startY, endX, endY);

`

解决方案:

    Graphics2D g2d = (Graphics2D) g;

    int angle = 91; 

    int startX = getWidth()/2;
    int startY = getHeight()/2;
    int length = 100;



    int endX = startX + (int)(Math.cos(Math.toRadians(angle)) * length);
    int endY = startY + (int)(Math.sin(Math.toRadians(angle)) * length);

    g2d.drawLine(startX, startY, endX, endY);

谢谢你们!

2 个答案:

答案 0 :(得分:2)

您是运营商优先级的受害者。你需要

int endX = startX + (int) (Math.cos(Math.toRadians(angle)) * length);
int endY = startY + (int) (Math.sin(Math.toRadians(angle)) * length);

答案 1 :(得分:1)

为获得最佳精度,请使用Math.round():

int endX = startX + (int)Math.round(Math.cos(Math.toRadians(angle)) * length);
int endY = startY + (int)Math.round(Math.sin(Math.toRadians(angle)) * length);

您可能没有注意到屏幕上的绘图有任何差异,但精度损失可能会导致可见的故障。