这是我的代码如何逐行逐像素地绘制一个直角三角形(颠倒):
double length = 10; double height = 5;
double aspectRatio = length / height;
double limit = 0.0;
int y = 0;
while (y < height) {
int x = 0;
while (x < (length - limit)) {
drawPixel(x, y); // fill pixel on canvas with black at x, y
x++;
}
limit += aspectRatio; // increase "step" how much to cut in length
// this part here is wrong, the limit increased is too little
y++;
}
我的问题是我没有从右上角延伸到左下角的斜边。这是因为我的计算错误,我不明白如何在线搜索正确的术语以找到我需要的计算。
在我的代码中,aspectRatio将变为2.0,并且当逐个像素绘制第一个完整行时,下一行将以2.0像素减少,下一行再次减少2.0像素,等等。这意味着绘制了5行看起来像这样:
[*][*][*][*][*][*][*][*][*][*]
[*][*][*][*][*][*][*][*][ ][ ]
[*][*][*][*][*][*][ ][ ][ ][ ]
[*][*][*][*][ ][ ][ ][ ][ ][ ]
[*][*][ ][ ][ ][ ][ ][ ][ ][ ]
然而,我试图得到这样的东西(注意负空间匹配像素数量并且是对角垂直的):
[*][*][*][*][*][*][*][*][*][*]
[*][*][*][*][*][*][*][*][ ][ ]
[*][*][*][*][*][ ][ ][ ][ ][ ]
[*][*][ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
显然,这主要是一个数学问题,但我不了解修复代码的必要公式。我该怎么办?
答案 0 :(得分:0)
请记住,像素是正方形并且有一个区域,而x / y坐标只是指向正方形左上角的点。这可能是您混淆/不正确斜边的原因。
尝试这样的事情(未经测试):
while (y < height) {
int x = 0;
// add 0.5 to x/y coordinates to check that the center of the
// pixel is inside your triangle, not the top left corner.
while ((float)x + 0.5 < ((float)y + 0.5) * aspectRatio) {
drawPixel(x, y); // fill pixel on canvas with black at x, y
x++;
}
limit += aspectRatio; // increase "step" how much to cut in length
// this part here is wrong, the limit increased is too little
y++;
}