Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Dreieck ausfüllen
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 05.07.2008, 09:20    Titel: Dreieck ausfüllen Antworten mit Zitat

Hallo Leute. Ich hoffe ihr könnt mir bei einem Geometrieproblem helfen. Das Programm an dem ich gerade arbeite muss ausgefüllte Dreiecke zeichnen können. Der Einfachheit halber mache ich das zur Zeit auf dem Bildschirm. Das eigentlich Programm soll das später in einer BMP-Datei machen. Daher ist der Befehlssatz zum zeichnen eingeschränkt. Es dürfen nur die Befehle PSET und LINE verwendet werden, die mir später auch bei zeichnen in die BMP-Datei zur Verfügung stehen.

Vielleicht hat ja jemand so etwas schon mal programmiert. Oder wenigstens eine Idee wie man am besten so etwas umsetzt.

Hier schon mal das bisherige Programm. Wie ihr seht fehlt der entscheidende Teil in der Funktion „ZeichneDreieck“ noch.

Code:
'=============================================================================
' DREIECK.BAS
'  Programm zum zeichnen von ausgefuellten Dreiecken.
'
' Bedienung:
'  ESC            -> Programm beenden
'  Sonstige Taste -> Neues Dreieck zeichnen
'=============================================================================
TYPE Koordinate
   x AS LONG
   y AS LONG
END TYPE

DECLARE SUB ZeichneDreieck (Ecke1 AS Koordinate, Ecke2 AS Koordinate, Ecke3 AS Koordinate, Farbe AS INTEGER)

DIM Ecke1 AS Koordinate
DIM Ecke2 AS Koordinate
DIM Ecke3 AS Koordinate
DIM Eingabe AS STRING

SCREEN 12

DO
   ' Altes Dreick loeschen
   LINE (0, 0)-(400, 400), 0, BF

   ' Eckpunkte zufaellig waehlen
   Ecke1.x = INT(400 * RND) + 1
   Ecke1.y = INT(400 * RND) + 1
   Ecke2.x = INT(400 * RND) + 1
   Ecke2.y = INT(400 * RND) + 1
   Ecke3.x = INT(400 * RND) + 1
   Ecke3.y = INT(400 * RND) + 1

   CALL ZeichneDreieck(Ecke1, Ecke2, Ecke3, 12)

   ' Warten auf Benutzereingabe
   DO
      Eingabe = INKEY$
   LOOP UNTIL LEN(Eingabe)
LOOP UNTIL Eingabe = CHR$(27)

'-----------------------------------------------------------------------------
' ZeichneDreieck
'  Funktion zum zeichnen eines ausgefuellten Dreiecks
'
' Parameter:
'  Ecke1 - Koordinate des ersten Eckpunktes
'  Ecke2 - Koordinate des zweiten Eckpunktes
'  Ecke3 - Koordinate des dritten Eckpunktes
'  Farbe - Farbe des Dreiecks
'-----------------------------------------------------------------------------
SUB ZeichneDreieck (Ecke1 AS Koordinate, Ecke2 AS Koordinate, Ecke3 AS Koordinate, Farbe AS INTEGER)
   ' Dreieck zeichnen
   LINE (Ecke1.x, Ecke1.y)-(Ecke2.x, Ecke2.y), Farbe
   LINE (Ecke1.x, Ecke1.y)-(Ecke3.x, Ecke3.y), Farbe
   LINE (Ecke2.x, Ecke2.y)-(Ecke3.x, Ecke3.y), Farbe

   ' Dreieck ausfuellen

   ' . . .

END SUB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 338

BeitragVerfasst am: 05.07.2008, 10:11    Titel: Antworten mit Zitat

Ist zwar Blitzbasic, aber du müsstest nur einen Befehl austauschen:

http://www.blitzforum.de/forum/viewtopic.php?t=6316&highlight=dreieck

Der Rect-Befehl zeichnet ein Rechteck ähnliche wie LINE (x, y)-(a, b),,b
Der Unterschied sind aber die Parameter Rect x, y, breite, höhe. Ersetzen kann man das also durch LINE (x, y) - (x + breite, y + höhe), ,b
_________________
Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 05.07.2008, 11:00    Titel: Antworten mit Zitat

Es sollte eigentlich reichen, den Eckenschwerpunkt des Dreiecks zu berechnen und diesen als Füll-Mittelpunkt zu verwenden.

Code:
screen 18
dim as short x1, y1, x2, y2, x3, y3, x, y

do
  cls
  ' zufaelliges Dreieck erzeugen
  x1 = rnd*640 : y1 = rnd*400
  x2 = rnd*640 : y2 = rnd*400
  x3 = rnd*640 : y3 = rnd*400
  line (x1, y1)-(x2, y2)
  line -(x3, y3)
  line -(x1, y1)

  'berechne Eckenschwerpunkt
  x = (x1 + x2 + x3) \ 3
  y = (y1 + y2 + y3) \ 3
  paint (x, y), 15
loop until input(1) = chr(27)

(FreeBASIC-Code)

edit: hätte ich vielleicht genauer lesen sollen, dass nur PSET und LINE verwendet werden sollen ... aber du kannst doch (zumindest in FreeBASIC) auf den Bildschirm zeichnen und diesen als BMP abspeichern?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ferdi



Anmeldungsdatum: 10.03.2007
Beiträge: 284
Wohnort: Berlin

BeitragVerfasst am: 05.07.2008, 11:13    Titel: Antworten mit Zitat

Hallo,
die Welt der Probleme ist klein...
Genau das selbe Problem hab ich auch (nur in 3D)

Wie kann ich das Dreieck mit einer Textur (BMP) füllen bzw. Skalieren, sodass es wie 3D aussieht.
Zum Beispiel bei einer Hauswand mit Fenster und sowas?

Viele Grüße und Danke schon im Vorraus

Ferdi
_________________
Dieser Post wurde cum grano salis gewürzt! Na dann: Guten Appetit!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 05.07.2008, 11:25    Titel: Antworten mit Zitat

Erst mal vielen dank. Ich habe doch gewusst, dass irgend jemand das schon mal programmiert haben muss. Das Prinzip ist ja auch recht einfach. Man muss nur mal drauf kommen. Allerdings sollte jemand im Blitzbasic-Form mal darauf aufmerksam machen, dass die Funktion eine Division durch Null erzeugt, wenn zwei Punkte die gleiche x-Koordinate haben.
Hier mal die Qbasic Version der Funktion von mir (Das Hauptprogramm habe ich diesmal weg gelassen):

Code:
'-----------------------------------------------------------------------------
' ZeichneDreieck
'  Funktion zum zeichnen eines ausgefuellten Dreiecks
'
' Parameter:
'  Ecke1 - Koordinates des ersten Eckpunktes
'  Ecke2 - Koordinates des zweiten Eckpunktes
'  Ecke3 - Koordinates des dritten Eckpunktes
'  Farbe - Farbe des Dreiecks
'-----------------------------------------------------------------------------
SUB ZeichneDreieck (Ecke1 AS Koordinate, Ecke2 AS Koordinate, Ecke3 AS Koordinate, Farbe AS INTEGER)
   DIM x AS INTEGER  ' Das Dreieck wird von links nach rechts gezeichnet

   DIM m1 AS DOUBLE  ' Steigung der Geraden von Ecke1 zur Ecke3
   DIM t1 AS DOUBLE  ' Y-Achsenabschnitt der Geraden von Ecke1 zur Ecke3
   DIM y1 AS INTEGER ' y-Koordinate auf der Geraden 1 zur aktuellen x-Koordinate

   DIM m2 AS DOUBLE  ' Steigung der zweiten Geraden (erst Ecke1-Ecke2, dann Ecke2-Ecke3)
   DIM t2 AS DOUBLE  ' Y-Achsenabschnitt der zweiten Geraden
   DIM y2 AS INTEGER ' y-Koordinate auf der Geraden 2 zur aktuellen x-Koordinate

   ' Dreieck zeichnen
   LINE (Ecke1.x, Ecke1.y)-(Ecke2.x, Ecke2.y), Farbe
   LINE (Ecke1.x, Ecke1.y)-(Ecke3.x, Ecke3.y), Farbe
   LINE (Ecke2.x, Ecke2.y)-(Ecke3.x, Ecke3.y), Farbe

   ' Ecken von links nach rechts sortieren
   IF Ecke1.x > Ecke2.x THEN SWAP Ecke1, Ecke2
   IF Ecke1.x > Ecke3.x THEN SWAP Ecke1, Ecke3
   IF Ecke2.x > Ecke3.x THEN SWAP Ecke2, Ecke3

   ' Dreieck ausfuellen
   IF Ecke1.x <> Ecke3.x THEN
      ' Geradengleichung aufstellen (Von linken Ecke zur rechten Ecke)
      m1 = (Ecke3.y - Ecke1.y) / (Ecke3.x - Ecke1.x)
      t1 = Ecke1.y - (m1 * Ecke1.x)
   
      IF Ecke1.x <> Ecke2.x THEN
         ' Geradengleichung aufstellen (Von linken Ecke zur mittleren Ecke)
         m2 = (Ecke2.y - Ecke1.y) / (Ecke2.x - Ecke1.x)
         t2 = Ecke1.y - (m2 * Ecke1.x)
       
         'Dreieck von der linken zur mittleren Ecke zeichnen
         FOR x = Ecke1.x TO Ecke2.x
            y1 = m1 * x + t1
            y2 = m2 * x + t2
            LINE (x, y1)-(x, y2), Farbe
         NEXT x
      END IF
     
      IF Ecke2.x <> Ecke3.x THEN
         ' Geradengleichung aufstellen (Von mittleren Ecke zur rechten Ecke)
         m2 = (Ecke3.y - Ecke2.y) / (Ecke3.x - Ecke2.x)
         t2 = Ecke2.y - (m2 * Ecke2.x)
       
         'Dreieck von der mittleren zur rechten Ecke zeichnen
         FOR x = Ecke2.x + 1 TO Ecke3.x
            y1 = m1 * x + t1
            y2 = m2 * x + t2
            LINE (x, y1)-(x, y2), Farbe
         NEXT x
      END IF
   END IF
END SUB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 05.07.2008, 17:47    Titel: Antworten mit Zitat

Das Beispiel

http://www.dreael.ch/Deutsch/Download/Funktionsdarstellung.html

beinhaltet ebenfalls eine derartige Routine. Für Kreisbogen habe ich ähnlich solche Routinen.

BMP in der unkomprimierten Form ist natürlich hervorragend geeignet, da Du eine Pixelzeile an-SEEK-en kannst und dann direkt Pixel hineinschreiben. Dasselbe gilt natürlich auch für meinen VESA-Artikel.

Der Tipp übrigens für beide Arten von virtuellen SCREEN-Generatoren: Ausschliesslich horizontale Line bzw. Rechteck mit Höhe 1 als Grundprimitv nehmen, da sowohl beim .BMP-File als auch bei VESA PRINT#/PUT-mässig bzw. POKE-mässig die Bytes hintereinanderliegen, was gegenüber irgendwelchem PSET oder gar vertikaler Linie viel bessere Performance gibt.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Ferdi



Anmeldungsdatum: 10.03.2007
Beiträge: 284
Wohnort: Berlin

BeitragVerfasst am: 06.07.2008, 15:19    Titel: Antworten mit Zitat

Puh ganz schön komplizierte Matrie...
Gibt es dazu irgendein Tut (für Texturen)??
mit dem Kopf durch die Mauer wollen mit dem Kopf durch die Mauer wollen mit dem Kopf durch die Mauer wollen mit dem Kopf durch die Mauer wollen mit dem Kopf durch die Mauer wollen mit dem Kopf durch die Mauer wollen mit dem Kopf durch die Mauer wollen
_________________
Dieser Post wurde cum grano salis gewürzt! Na dann: Guten Appetit!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 06.07.2008, 15:53    Titel: Antworten mit Zitat

Meine Güte, lern doch einfach Freebasic und openGL oder DirectX!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 06.07.2008, 16:53    Titel: Antworten mit Zitat

wenn du wirklich ein 3d-spiel mit texturen in QB programmieren willst, wirst du sowieso nicht um EMS- und XMS-Speicher drumherum kommen, und den unter der ist unter windows XP standardmäßig deaktiviert...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Ferdi



Anmeldungsdatum: 10.03.2007
Beiträge: 284
Wohnort: Berlin

BeitragVerfasst am: 09.07.2008, 15:07    Titel: Antworten mit Zitat

Dann kann man doch ne .PIF - Datei erstellen, inder das Aktiviert wird...

_________________
Dieser Post wurde cum grano salis gewürzt! Na dann: Guten Appetit!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 09.07.2008, 15:30    Titel: Antworten mit Zitat

ja siehste mal wie kompliziert das ist... und das muss dann JEDER machen, der das programm benutzen will. Bei einer richtigen FB-Anwedung, die nativ unter windows (auch windows 64bit) läuft und zudem noch schneller ist, hat man keine probleme...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Ferdi



Anmeldungsdatum: 10.03.2007
Beiträge: 284
Wohnort: Berlin

BeitragVerfasst am: 10.07.2008, 14:39    Titel: Antworten mit Zitat

Jojo hat Folgendes geschrieben:
ja siehste mal wie kompliziert das ist... und das muss dann JEDER machen, der das programm benutzen will. Bei einer richtigen FB-Anwedung, die nativ unter windows (auch windows 64bit) läuft und zudem noch schneller ist, hat man keine probleme...

Nein ich kann doch ne .PIF Datei erstellen und dazulegen...
_________________
Dieser Post wurde cum grano salis gewürzt! Na dann: Guten Appetit!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 10.07.2008, 22:18    Titel: Antworten mit Zitat

PIF-Dateien erfordern vollständige Pfadangaben. Somit läuft die PIF nur auf deinem Rechner oder alle müssen das Programm im selben Verzeichnis ablegen (diese Zeiten sind VORBEI!). Allein schon das herausfinden des aktuellen verzeichnisses (für das erstellen einer PIF-Datei unter QB) ist unheimlich kompliziert, in FB würde dazu eine Zeile reichen...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Ferdi



Anmeldungsdatum: 10.03.2007
Beiträge: 284
Wohnort: Berlin

BeitragVerfasst am: 15.08.2008, 21:24    Titel: Antworten mit Zitat

na schön...
On Topic:
Gibts zum Thema 3D Texturen ein gutes (deutsches) Tut für:

*QuickBasic
*QuickC 2.5

?? neutral
_________________
Dieser Post wurde cum grano salis gewürzt! Na dann: Guten Appetit!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 16.08.2008, 13:22    Titel: Antworten mit Zitat

hi, tutorials kenne ich zwar nicht, aber es gibt Libraries die dir diese Arbeit abnehmen: UGL, DirectQB, FutureLib, ak-lib
Zu finden unter: qbasic.de->download->libraries
texturierte Dreiecke kriegt man auf jeden fall mit der FutureLib hin, aber der Nachteil ist die Geschwindigkeit. UGL hat bei mir nur im modus 320x240x8 funktioniert. die ak-lib scheint da am besten zu sein.

28398 hat Folgendes geschrieben:
Meine Güte, lern doch einfach Freebasic und openGL oder DirectX!

würde ich auch empfehlen. wenn du fb & OpenGL nutzt, hast du zusätzlich den Vorteil das deine Programme auch unter Linux verwendbar sind.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 16.08.2008, 14:01    Titel: Antworten mit Zitat

was kümmert das einen stolzen vista-user? lachen
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 16.08.2008, 14:35    Titel: Antworten mit Zitat

stolzer Vista User? *juckreiz krieg*
wie kann man darauf nur stolz sein geschockt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 16.08.2008, 14:40    Titel: Antworten mit Zitat

keine ahnung, aber schau dir doch einfach seine beiträge an zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Ferdi



Anmeldungsdatum: 10.03.2007
Beiträge: 284
Wohnort: Berlin

BeitragVerfasst am: 16.08.2008, 17:52    Titel: Antworten mit Zitat

Thanx!
Also ich bin stolz auf Vista grinsen
_________________
Dieser Post wurde cum grano salis gewürzt! Na dann: Guten Appetit!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 16.08.2008, 18:18    Titel: Antworten mit Zitat

Zitat:
Thanx!

hast du das jetzt wirklich als lob aufgefasst? O_o
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz