Java 逐像素、逐行绘制直角三角形?

Java 逐像素、逐行绘制直角三角形?,java,geometry,aspect-ratio,Java,Geometry,Aspect Ratio,这是我的代码,我如何画一个直角三角形,逐像素,逐行(倒置): 然而,我试图得到类似的结果(注意负空间与像素数量匹配,并且是对角垂直的): 显然,这主要是一个数学问题,但我不理解修复代码所需的方程式。我该怎么办?请记住,像素是正方形,并且有一个面积,而x/y坐标只是指正方形左上角的点。这可能是造成您混淆/斜边不正确的原因 尝试类似的方法(未经测试): while(y

这是我的代码,我如何画一个直角三角形,逐像素,逐行(倒置):

然而,我试图得到类似的结果(注意负空间与像素数量匹配,并且是对角垂直的):


显然,这主要是一个数学问题,但我不理解修复代码所需的方程式。我该怎么办?

请记住,像素是正方形,并且有一个面积,而x/y坐标只是指正方形左上角的点。这可能是造成您混淆/斜边不正确的原因

尝试类似的方法(未经测试):

while(y<高度){
int x=0;
//将0.5添加到x/y坐标,以检查
//像素位于三角形内部,而不是左上角。
而((浮动)x+0.5<((浮动)y+0.5)*方面){
drawPixel(x,y);//在x,y处用黑色填充画布上的像素
x++;
}
limit+=aspectRatio;//增加“步长”以缩短长度
//这部分是错误的,增加的限制太少
y++;
}

为什么不计算小一行三角形的纵横比?i、 e.双侧面=长度/(高度-1.0);此代码还必须与任何长度/高度值一起工作,很抱歉我遗漏了这一点。例如,分别为1300和700。这不适用于您的示例为什么该公式不适用于任何长度或高度(大于1)?你测试过了吗?结果不对?是的,我测试过了,它不起作用。例如,在您的示例中,如果我们的长度为1300,高度为700,而不是将aspectRatio计算为长度/高度,即1.85714285714286,则您希望计算为长度/(高度-1),或者在本例中为1300/699,即1.85979971387697。这两个值之间的差异很小。斜边仍然是错误的。你是通过运行程序来测试它,还是仅仅通过计算来测试它?这个问题是一种篱笆柱错误:每一行都是一个“篱笆柱”,如果有h行,则有h-1步,因此需要除以h-1以获得端点处的有效值。谢谢帮助,这段代码的工作方式非常不同,还会导致斜边不正确。原因可能是什么?
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++;
}
[*][*][*][*][*][*][*][*][*][*]
[*][*][*][*][*][*][*][*][ ][ ]
[*][*][*][*][*][*][ ][ ][ ][ ]
[*][*][*][*][ ][ ][ ][ ][ ][ ]
[*][*][ ][ ][ ][ ][ ][ ][ ][ ]
[*][*][*][*][*][*][*][*][*][*]
[*][*][*][*][*][*][*][*][ ][ ]
[*][*][*][*][*][ ][ ][ ][ ][ ]
[*][*][ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
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++;
}