2D Vektor in einzelnen Pixel ausgeben



  • hallo
    ich bin gerade dabei ein wenig mit 2D Vektoren herumzuspiele und habe folgendes problem:

    ich möchte die klasse System.drawing.line der ich zwei punkte mit gebe selbst schreiben so das ich mit set.Pixel() einen 2D vektor darstellen kann.

    ich bin soweit das ich die anfangs und endpunkte ausgeben kann ich weis nur ich wie ich meine schleife programmieren muss damit ich die verbinden kann

    ich habe die funktionen Delta_x und delta_x angelegt die mir einen float zurückgeben

    bitte um hilfe viele dank im vorraus



  • Wozu brauchst du das????



  • Was wird deiner Meinung nach an deiner Draw-Funktion anders (besser) gelöst aals mit der Standard-Version?



  • ich möchte messdaten in einer grafik darstellen und von daher ist es für mich einfacher wenn ich genau weis was die klasse drawing.line intern macht.



  • Ich denke nicht, dass die Klasse drawing.line sehr aufschlussreich für dich sein wird. Zeichnen einer Linie ist eine Elementare Funktion der Grafik-API des Betriebssystems bzw. noch tiefer - der Grafikkarte. Es ist im übrigen auch gar nicht sooo leicht zwei Punkte auf dem Bildschirm miteinander zu verbinden 🙂



  • das es nicht so einfach ist habe ich auch schone gemerkt sonst hätte ich die frage nicht gestellt ich weis auch das ich für anfangs und endpunkte x,y kordinaten und das ich anfags und endpunkt durch schleifen muss aber wie???



  • Zeichnen einer Linie pixelweise (PseudoCode):

    Lpixel, LMaxAxisLength: integer; 
    LRatio: Real; 
    
    LMaxAxisLength = Max(abs(Point1.X - Point2.X), abs(Point1.Y - Point2.Y)); 
    for Lpixel = 0 to LMaxAxisLength   
    {
        LRatio = Lpixel / LMaxAxisLength; 
        Canvas.SetPixel(Point1.X + Round((Point2.X-Point1.X) * LRatio), 
                        Point1.Y + Round((Point2.Y-Point1.Y) * LRatio);
    }
    

    Edit: Hier mal als Java-Code
    [java]import javax.swing.;
    import java.awt.
    ;

    public class LineTest extends JFrame
    {
    public LineTest() {
    super("Drawing a Line ...");
    this.getContentPane().add(new JPanel() {
    public synchronized void paint(Graphics g) {
    super.paint(g);
    int p1X = 10;
    int p1Y = 10;
    int p2X = 300;
    int p2Y = 300;

    int Lpixel, LMaxAxisLength;
    double LRatio;

    LMaxAxisLength = (Math.abs(p1X - p2X) > Math.abs(p1Y - p2Y)) ? Math.abs(p1X-p2X) : Math.abs(p1Y - p2Y);
    for (Lpixel=0; Lpixel <= LMaxAxisLength; ++Lpixel) {
    LRatio = (double)Lpixel / LMaxAxisLength;
    g.drawArc((int)(p1X + Math.round((p2X-p1X) * LRatio)),
    (int)(p1Y + Math.round((p2Y-p1Y) * LRatio)),
    2,
    2,
    0,
    360);
    }
    }
    });
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String args[]) {
    new LineTest().show();
    }
    }[/code]


Anmelden zum Antworten