我正在尝试在屏幕中间绘制一个原点的圆圈:
width = canvas.getWidth();
height = canvas.getHeight();
BufferStrategy bufferStrategy = canvas.getBufferStrategy();
if(bufferStrategy == null){//If bufferStrategy is not initialized yet
canvas.createBufferStrategy(3);
bufferStrategy = canvas.getBufferStrategy();
}
Graphics graphics = bufferStrategy.getDrawGraphics();
public int[] pixels = new int[width * height];
int radius = height / 6;
for(int theta = 0; theta < 360; theta++){
double rads = Math.toRadians(theta);
double x = (width / 2) + (Math.cos(rads) * radius);
double y = (height / 2) + (Math.sin(rads) * radius);
pixels[(int)(x + y * width)] = 0xFFFF00FF;
}
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
image.setRGB(0, 0, width, height, pixels, 0, width);
graphics.drawImage(image, 0, 0, width, height, null);
但是我得到了一个奇怪的结果:
感谢您的帮助!
答案 0 :(得分:2)
在进行数学计算之前将x和y值转换为整数,以确定哪些像素可以更改颜色。
int x = (int) ((width / 2) + (Math.cos(rads) * radius));
int y = (int) ((height / 2) + (Math.sin(rads) * radius));
pixels[(x + y * width)] = 0xFFFF00FF;
内联执行会导致一些舍入错误。
答案 1 :(得分:0)
问题是索引到pixels
数组的数学。 x + y * width
的公式期望x
和y
的离散值。但是,因为它代表y * width
被计算为一个double值,导致像素部分偏离图像的左侧,即使x=0
也是如此。
您需要确保将x
和y
规范化为int
值,然后才能将其用于索引到pixels
的公式中:
pixels[(int)x + (int)y * width] = 0xFFFF00FF;
这给出了预期的结果。