drawLine関数を作成したいのですが、グラフィックスクラスを使用することはできません(ピクセルを設定することはできます)。私はこの方法を試しましたhttps://en.wikipedia.org/wiki/Bresenham's_line_algorithm#Methodしかし、これは、行が左上から右下に向かい、例えば右上から左下に行く場合にのみ機能します。誰もこれを行う方法がありますか?私が持っている現在のコード:Draw line function
public void drawLine(int startX, int startY, int endX, int endY) {
double deltaX = endX - startX;
double deltaY = endY - startY;
double error = -1;
double deltaError = Math.abs(deltaY/deltaX);
int y = startY;
for (int x = startX; x < endX - 1; x++) {
error += deltaError;
if (error >= 0) {
y++;
error--;
}
drawPixel(x, y);
}
}
すべてのヘルプは高く評価されます。
私はそれを解決しました。最終結果はこれです。
public void drawLine(int startX, int startY, int endX, int endY) {
if (startX > endX && startY > endY) {
int startXCopy = startX;
startX = endX;
endX = startXCopy;
int startYCopy = startY;
startY = endY;
endY = startYCopy;
}
double deltaX = endX - startX;
double deltaY = endY - startY;
double error = -1;
double deltaError = Math.abs(deltaY/deltaX);
if (deltaX == 0) {
for (int y = startY; y < endY; y++)
drawPixel(startX, y);
}
if (deltaY == 0) {
for (int x = startX; x < endX; x++)
drawPixel(x, startY);
}
if (deltaX >= deltaY) {
int y = startY;
int yDirection = endY > startY ? 1 : -1;
for (int x = startX; x < endX - 1; x++) {
error += deltaError;
if (error >= 0) {
y += yDirection;
error--;
}
drawPixel(x, y);
}
} else if (deltaY > deltaX) {
int x = startX;
int xDirection = endX > startX ? 1 : -1;
for (int y = startY; y < endY - 1; y++) {
error += deltaError;
if (error >= 0) {
x += xDirection;
error--;
}
drawPixel(x, y);
}
}
}
重要な情報がありません:どのGUIライブラリを使用していますか? –
私は実際にGUIライブラリを使用していません。私はこれらのメソッドにアクセスできます:drawPixel、drawText、drawImage、drawRect、およびfillRect – stefvanschie
''私はこれらのメソッドにアクセスできます... " - アクセス***どうやって***? –