hi, ich wollt mich selbst mal an einem Algorhytmus versuchen, eine Linie zu zeichnen in java, ich bin ja fleißig am lesen, und las auch etwas über den Algorhytmus von Bresenham, durch den man Linien zeichnen konnte.
Nun denn, ich machte mich an die Arbeit:
Das Problem:
Wenn der Punkt A kleiner als Punkt B ist, also in X und Y Coordinate funktioniert alles prima, andernfalls, nichts.
Warum?
Irgendwo funktionieren die schleifen net, ich hab mein bestes versucht kriegs aber leider alleine nicht hin, kann mir bitte einer helfen?
Developer_X
Achtung!
Beim ausprobieren könnt ihr mit meinem Algorhytmus wirklich linien ziehen, aber nur wenn ihr im 2.Quadranten seit, ansonsten spinnt es irgendwo off, und dann geht die schleife ewig.
PS:
Bin jetzt noch beim ersten Buch in Kapitel 4.2
Nun denn, ich machte mich an die Arbeit:
Java:
package main;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class Main extends JFrame
{
int x = 100;
int y = 100;
public Main()
{
setTitle("Riehl'sche Algorithmus");
setSize(200,200);
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel()
{
public void paintComponent(Graphics g)
{
g.setColor(Color.white);
g.fillRect(0,0,getSize().width,getSize().height);
g.setColor(Color.red);
drawLine(g,new Vector2D(x-1,y-1),new Vector2D(100,100));
}
};
p.addMouseMotionListener(new MouseMotionListener()
{
public void mouseDragged(MouseEvent arg0)
{
x = arg0.getX();
y = arg0.getY();
repaint();
}
public void mouseMoved(MouseEvent arg0)
{
}
});
add(p,"Center");
setVisible(true);
}
public void drawLine(Graphics g, Vector2D a, Vector2D b)
{
// Continue
float d = (float) a.getDistance(b);
float dx = (float) (b.x-a.x);
float dy = (float) (b.y-a.y);
float x = (float) a.x;
float y = (float) a.y;
if(a.x==b.x&&a.y==b.y)
{
drawPixel(g,x,y);
}
else if(a.x==b.x)
{
x = (float) a.x;
for(;;)
{
if(y>b.y)
{
break;
}
else
{
y+=dy/d;
}
drawPixel(g,x,y);
}
}
else if(a.y==b.y)
{
y = (float) a.y;
for(;;)
{
if(x>b.x)
{
break;
}
else
{
x+=dx/d;
}
drawPixel(g,x,y);
}
}
else
{
if(x>b.x&&y>b.y)
{
for(;;)
{
if(x<b.x&&y<b.y)
{
break;
}
else
{
if(x>b.x)
{
x -= dx/d;
}
if(y>b.y)
{
y -= dy/d;
}
}
drawPixel(g,x,y);
}
}
else if(x<b.x&&y>b.y)
{
}
else if(x>b.x&&y<b.y)
{
}
else
{
for(;;)
{
if(x>b.x&&y>b.y)
{
break;
}
else
{
if(x<b.x)
{
x += dx/d;
}
if(y<b.y)
{
y += dy/d;
}
}
drawPixel(g,x,y);
}
}
}
}
public void drawPixel(Graphics g, float x, float y)
{
g.drawLine((int)x,(int)y,(int)x,(int)y);
}
public static void main(String[]args)
{
new Main();
}
}
Wenn der Punkt A kleiner als Punkt B ist, also in X und Y Coordinate funktioniert alles prima, andernfalls, nichts.
Warum?
Irgendwo funktionieren die schleifen net, ich hab mein bestes versucht kriegs aber leider alleine nicht hin, kann mir bitte einer helfen?
Developer_X
Achtung!
Beim ausprobieren könnt ihr mit meinem Algorhytmus wirklich linien ziehen, aber nur wenn ihr im 2.Quadranten seit, ansonsten spinnt es irgendwo off, und dann geht die schleife ewig.
PS:
Bin jetzt noch beim ersten Buch in Kapitel 4.2