java 控制台 画_java-在控制台上的两点之间画线

如果我有2D字符数组,如何在控制台上画一条线.我要编写的函数如下所示:

这是我的第一次尝试,但看起来完全错误

public static void line(char[][] mPixels, int startRow, int startColumn, int endRow, int endColumn)

{

double dY = endRow - startRow;

double dX = endColumn - startColumn;

double slope = dX / dY;

slope = Math.abs(slope);

if(slope >= 1)

{

double progress = -(dY / dX);

for(int i=startColumn; i<=endColumn; i++)

{

double j = startRow - (int) ((i-startColumn) * progress);

int yLoc = (int) (Math.round( j * 100.0 ) / 100.0);

mPixels[i][yLoc] = '*';

}

}

// print array

}

解决方法:

使用DDA或Bresenham,…

您所看到的看起来像DDA,但不能正确处理坡度.您应该用像素数量较大的轴进行划分并将其用作控制轴,这样:

如果| dx |> | dy |然后通过x = x0-> x1和y = y0((x-x0)* dy / dx)

如果| dx |< | dy |然后通过y = y0-> y1和x = x0((y-y0)* dx / dy)

如果它们相等,则使用以上任何一项.

如果dx == 0且dy == 0则仅画点且不存在for

别忘了处理主轴是上升还是下降(可以是x,y或x-,y–),也可以仅对整数进行除法或乘法运算,但这是另一回事

标签:java,algorithm,dda

来源: https://codeday.me/bug/20191122/2060301.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值