JavaでDDAアルゴリズムを実装して線を描画しようとしています。ラインラスタライザはインターフェイスを実装します。次に、Canva
というクラスのrasterizeLine
関数を呼び出します。 LineRasterizesはxとyの点を正常に取得します。エラーはスローされませんが、線が描画されていないため、アルゴリズムには論理的な問題があります。論理的な間違いを見つけるのを助けてくれますか?DDAアルゴリズムの実装
インタフェース
package rasterops;
import rasterdata.RasterImage;
public interface LineRasterizer<PixelType> {
RasterImage<PixelType> rasterizeLine(RasterImage<PixelType> img,
double x1, double y1, double x2, double y2,
PixelType value);
}
ラインラスタライザ
package rasterops;
import rasterdata.RasterImage;
public class LineRasterizerDDA<PixelType> implements LineRasterizer <PixelType> {
@Override
public RasterImage<PixelType> rasterizeLine(RasterImage<PixelType> img, double x1, double y1, double x2, double y2, PixelType value) {
double dy = y2-y1;
double dx = x2-x1;
double k = dy/dx;
double y = y1;
RasterImage<PixelType> result = img;
for(double x = x1; x <= x2; x++){
result = result.withPixel((int)x, (int)Math.round(y), value);
y = y1 + k;
}
return result;
}
}
Canva - このリチウム
panel.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
previousX = e.getX();
previousY = e.getY();
}
});
panel.addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
final double startX = previousX/(panel.getWidth() - 1.0); //k zamysleni: proc 1.0 a ne 1?
final double startY = 1 - previousY/(panel.getHeight() - 1.0);
final double endX = e.getX()/(panel.getWidth() - 1.0);
final double endY = 1 - e.getY()/(panel.getHeight() - 1.0);
clear(); // zkuste zakomentovat
rasterImage = liner.rasterizeLine(rasterImage,
startX, startY, endX, endY,
0xffff00);
panel.repaint();
}
});
あなたは(https://stackoverflow.com/questions/46920911/finding-a-bug-in-an-algorithm)[すでにこの質問をしました]。 –
@AndyTurner私は最初のものを削除しました。 – pajicekkralicek
まあ、同じ理由で同様のコメントでこれを閉じると考えています。 [なぜ誰かが私を助けることができるのですか?実際の質問ではありませんか?](https://meta.stackoverflow.com/q/284236/3788176) –