1

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

问题:我的角度是一个整数,我使用 Math.toRadians(angle) 来计算角度本身作为它的绘制。当我画线时,我必须将 (int) 转换为从 Math.toRadians() 产生的双精度数,这导致我失去了角度本身,我相信这是阻止画线的原因。

我正在使用的代码:`

    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);

多谢你们!

4

2 回答 2

2

您是运算符优先级的受害者。你需要

int endX = startX + (int) (Math.cos(Math.toRadians(angle)) * length);
int endY = startY + (int) (Math.sin(Math.toRadians(angle)) * length);
于 2016-05-02T05:40:12.350 回答
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);

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

于 2016-05-02T05:53:14.250 回答