mikrocontroller.net

Forum: FPGA, VHDL & Co. Zeichnen in vhdl


Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe ein kleines ( oder etwas grösseres) Problem.

ich habe versucht ein Grafikprogramm zu programmieren.

Inhalt des Programmes sollte sein: kleiner Curser mit dem man linien
Zeichne kann.

Curser Funktioniert bereits, nur wenn ich eine Linie zeichnen möchte
funktioniert das nicht so wie ich will.

Es sollen mit dem Curser 2 Koordinatenpunkte bestimmt werden und dann
vom Punkt_1 zum Punkt_2 eine Linie gezogen werden.

Das Problem: Das Zeichnen von Punkt_1 zum Punkt_2


wer kann mir bitte helfen???

Autor: toddoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus deinen Aussagen lassen sich keine Rückschlüsse auf dein Problem
entnehmen. VHDL ist doch keine Sprache mit der man Zeichen kann.
Schick doch mal deinen VHDL Code mit einem Foto von deinem Display,
deinem Cursor, lass dir doch nicht alles aus der Nase ziehen. Kein
Mensch kann aus deinen Aussagen irgendeine Information entnehmen, um
dir Helfen zu können. Bisschen schreiben hat doch noch niemanden
geschadet.

G Tobi

Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay...

wollte mit dem spartan 3 starterkitt board von xilinx eine vga
ansteuerung machen und mittesl tastatur eine einfache linie zeichnen.

zur optischen unterstützung habe ich eine curser ausgeben lassen damit
man sieht wo man sich befindet.

wenn man jetzt 2 willkürliche punkte hat( als probe sind 2 Punkte mit
koordinaten fix im programm implementiert worden)

ich habe gerade im internet gelesen das man so etwas mit dem Bresenham
-ALgorithmus macht. Leider habe ich nur ein Beispiel in c und in einer
sprache die mir nicht ganz so geläufig ist( ich nehme an das ist kein
vhdl sondern verilog und da kenn ich mich nicht so aus
-> eigendlich gar nicht.


sprich das problem ist: möchte 2 koordinatenpunkte am bildschirm in
form einer linie verbinden und habe keine ahnung wie das mit diesem
algorithmus funktionieren soll


welcher code würde denn was bringen? vhdl code, oder dieser algorithmus
code, oder beide

Autor: toddoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sauber

Also mein Mathematiklehrer hat mir folgendes Beigebracht:

Geradengleichung
y = m*x + offset
Punktsteigungsform
y - y1 = m(x-x1)
y = m(x-x1)+y1
m = (y1-y2)/(x1-x2)

Bei deinem Problem würde sich die Zweipunktform anbieten:

(y-y1)/(x-x1) = (y2-y1)/(x2-x1)

, wobei Cursor1 P1 = ( y1,x1 )
, wobei Cursor2 P2 = ( y2,x2 )

Diese Zweipunktform umstellen nach y, und du hast deine Funktion, deine
gerade ergibt sich, indem du alle Funktionswerte zwischen x1 bis x2
durchrechnest, das könntest du mit einem Automaten machen, oder direkt
als Formel in VHDL angeben, wäre sogar noch einfacher, oder nur rechnen
wenn du in der entsprechenden Zeile bist.

Ich weiss leider nicht, wie du die Pixel im FPGA darstellst, ob du Alle
Pixel im Block-Ram abgespeichert hast, und du quasi Pixel für Pixel
ausliest, oder wie auch immer. Machbar ist das auf alle fälle.
Ich hoffe das hilft dir.

G Tobi

Autor: Udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo markus,

ich habe soetwas vor zig Jahren mal in Pascal (Quellen sind leider
nicht mehr auffindbar) nach dem DDA Algorythmus (Digital Differential
Analyzer) programmiert. Der Vorteil gegenüber den normalen Algorithmen
ist, daß Du komplett mit Addition und Subtraktion auskommst.

Ich hab mal kurz gegoogelt und folgendes Dokument gefunden:
"http://iamwww.unibe.ch/~fcglib/special_www/cg_lect...;

Einfach mal nach DDA suchen.

Autor: Hannes Hering (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich wollt mal schnell was zum Thema Bresenham-Algorithmus und DDA
sagen:

http://iamwww.unibe.ch/~fcglib/special_www/cg_lect...

--- snip ---
Seite 45/88 7.1 Rasterkonvertierung
[...]
Integer DDA
Dieser Algorithmus ist besser als der normale DDA. Die ber¨uhmteste
Variante stammt
von J.E. Bresenham
--- snap ---

Also auf dem richtigen Weg ist man immerhin mal angekommen! ;)

MFG

Hannes

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.