我一直在研究分形,并决定试一试,但立即遇到了一个更简单的问题。我不能以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);
谢谢你们!
答案 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);
您可能没有注意到屏幕上的绘图有任何差异,但精度损失可能会导致可见的故障。