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 füllen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 15.05.2005, 21:55    Titel: Dreieck füllen Antworten mit Zitat

mal ne ganz simple Frage:

wie kann ich ein Dreieck füllen?

mit PAINT hab ich schon ausprobiert, aber das klappt irgendwie nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 15.05.2005, 22:14    Titel: Antworten mit Zitat

Warum klapt PAINT nicht ?

Code:

PAINT (x,y), Ausfüllfarbe, bis Randfarbe


Müsste doch gehn! XY sind dei Krodinaten, die Ausfüllfarbe is klar und Randfarbe bedeutet das bis diese Farbe ereicht ist ausgefüllt werden soll. Ist das Dreieck also Balu ist die Rand farbe auch Blau (also 1).
_________________
www.piratenpartei.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 15.05.2005, 22:17    Titel: Antworten mit Zitat

Kennst du schon den Draw-Befehl? Mit ihm ist es u. a. möglich Dreiecke oder x-beliebige Körper auszufüllen. lächeln

Syntax: Draw "Anweisung 1 Anweisung 2 [...] Anweisung N"

Beispiel für das Ausfüllen eines Dreiecks

Color 14
Line (200,200)-(100,100)
Line (100,100)-(300,200)
Line (200,200)-(300,200) 'zeichnet das Dreieck

Draw "BM 150,150" ' rückt den Cursor der Draw-Anweisung an
die Position 150, 150. Wichtig: Diese
Koordinaten müssen innerhalb der
auszufüllenden Fläche liegen!

Draw "P 9, 14" ' Befehl zum Ausfüllen des Dreiecks

P = Anweisung zum Ausfüllen
9 = die Farbe, mit der das Dreieck ausgefüllt werden soll, also dunkelblau
14 = die Umrandungsfarbe des Dreiecks, also die Farbe, bis zu der die Figur von innen heraus ausgefüllt werden soll.

Probiers mal aus, wenn ich nicht grad ein paar sntaktische Fehler reingebaut habe, müsstes funzen. grinsen
_________________
Ein richtiger Programmierer muss so richtig faul sein und sich den ganzen Tag mit der Frage beschäftigen, wie man mal wieder etwas einfacher machen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

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

Wieso soll das nicht klappen???

Mach die linien vom dreieck in der gleichen farbe wie das nacher auch gefüllt werden soll

Code:

SCREEN 12
LINE(10,10)-(100,10)
LINE (10,10)-(10,100)
LINE (10,100)-(100,10)

'kann man weglassen
SLEEP

PAINT(15,15)

_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


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

BeitragVerfasst am: 15.05.2005, 23:42    Titel: Antworten mit Zitat

In meinem Funktionsplotterprogramm unter

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

ist sonst eine spezielle SUB-Routine ZeiDreieck() für gefüllte Dreiecke enthalten, welche auf horizontale Linien basiert.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 16.05.2005, 17:45    Titel: Antworten mit Zitat

Danke.

Habe beim Paint Befehl immer die Randfarbe vergessen, darum wurde immer der ganze Bildschirm bemalt grinsen
kann ja mal passieren zwinkern

Nun könnte ich eine 2. Frage direkt anschließen:

Wie erhalte ich bei einem beliebigen Dreieck die MItte?

bzw. einen Punkt in dem Inneren.
Da gibst doch bestimmt so ne Formel. Bei 90° WInkel weiß ich, dass man mit Satz des Pythagoras das machen könnte. Aber sonst?

Gegeben sind die Punkte p1, p2, p3.
Jeweils mit x,y
z lassen wa erstmal weg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

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

Hallo!

Also:

XMitte = Grundline / 2
YMitte = Höhe / 2

/\ <Von der Grundline bis hier ist die Höhe
/ \
/ \
/ \
------- <Grundlinie

Das Text-Dreieck kann ein bisschen verzerrt sein durchgeknallt

Die Position an XMitte, YMitte ist dann der Mittelpunkt des Dreiecks.
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 16.05.2005, 18:41    Titel: Antworten mit Zitat

@Quark:
Das Forum hält folgen von mehr als einem Leerzeichen für Überflüssig, und kürzt sie raus.
Wenn sie trotzdem angezeigt werden sollen, musst du sie als code anzeigen:

Code:

   /\ <Von der Grundline bis hier ist die Höhe
  /  \
 /    \
/      \
------- <Grundlinie


Außerdem ein Problem bei der sache: Du gehst dabei davon aus, dass die Grundlinie parallel zur x-achse is.

Die Formel wäre also:

Code:

'...Code, der die Dreieckskoordinaten x1,y1,x2,y2,x3,y3 ermittelt...

'Mittelpunkt einer Dreiecksseite
tmpX = (x1 + x2) / 2
tmyY = (y1 + y2) / 2

'Mittelpunkt des Dreiecks
MX = (tmpX + x3) / 2
MY = (tmpY + y3) / 2


Oder, das ganze als zwei Zeilen ohne Zwischenschritt tmpX/Y:
Code:
MX = ((x1 + x2) / 2 + x3) / 2
MY = ((y1 + y2) / 2 + y3) / 2



Ich habe das getestet.
Die errechneten Punkte sind rein optisch nicht gerade die Mitte, liegen aber immer innerhalb des dreiecks. Und das ist ja auch schon alles, was du für PAINT brauchst.
Probleme köntne es geben, wenn die Dreiecke sehr klein sind (Seitenlängen < 5 Pixel)...
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 16.05.2005, 19:17    Titel: Antworten mit Zitat

Aber der Mittelpunkt eines Dreiecks ist doch der Schnittpunkt der
Winkelhalbierenden, oder irre ich mich jetzt total?

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 16.05.2005, 20:04    Titel: Antworten mit Zitat

Kommt ganz drauf an...
Der Mittelpunkt des Inkreises ist der Schnittpunkt der Winkelhalbierenden, der MP des Umkreises ist der SP der Seitenhalbierenden. (oder täusche ich mich... peinlich )

Den Schnittpunkt der Winkelhalbierenden ermittelst du am besten als Geradenschnittpunkt. Hat aber den nachteil, dass bei der Ermittlung der Steigungen der Error "division by zero" auftreten kann...

Code:
'x1, y1, ....

m1 = (y1 - y2) / (x1 - x2)
m2 = (y2 - y3) / (x2 - x3)

t1 = m1 * (y1 - x1)
t2 = m2 * (y2 - x2)

xschnit = (t2 - t1) / (m1 - m2)
yschnitt = m1 * xschnitt + t1



Wenn du den Inkreis brauchst (oder dem Umkreis...) dann dürfte die Variante wohl die Beste sein, sonst nimmst du lieber die erste, weil diese ziemlich Fehleranfällig ist. Sobalt eine Seite parall. zur x-Achse ist, kanns zur Division durch Null kommen...
Da müsstest dann mit ON ERROR ansetzen, und entsprechende Fehlerbehandler einbauen....


Gesucht ist aber sowiso ein Punkt, der IM Dreieck sein soll, wo genau er da drinnen ist, bleibt doch eigentlich egal zwinkern


//Anmerkung:
Sieht so aus, als würde das nicht ganz funktionieren... der Gfx-Schnittpunkt ist nicht der errechnete, und ganz abgesehen davon sind die beiden Geraden sowiso keine Winkelhalbierenden...
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 16.05.2005, 20:18    Titel: Antworten mit Zitat

Kann es sein, das bei der Bibliothek UGL der Befehl PAINT ersetzt wurde, durch irgend einen internen Befehl.
Denn immer kommt beim AUfruf mit PAINT ein Fehler.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 16.05.2005, 20:40    Titel: Antworten mit Zitat

Die meisten GFX-Lib's verwenden eigene Grafikbefehle. Im Falle von UGL ist das sogar notwendig, da diese LIB den Grafikspeicher anders verwaltet als QB; nur so ist es überhaupt möglich, höhere Auflösungen als 640x480 zu erreichen.

Die Andere Frage ist, ob die LIB einen solchen Befehl überhaupt mitbringt; PAINT ist nicht sehr leicht zu implementieren...
Am besten, du schaust dir einfach mal die Dokumentation an, da wirst du sicher was finden.
Ich habe mich mit den verschiedenen LIBs nicht besonders auseinander gesetzt, und weiß nicht welche LIB welche Funktionen bringt... UGL hat aber einen recht guten Ruf (soweit ich weiß), und wird wahrscheinlich schon einen PAINT-Befehl mitbringen.


Wenn du aber nur die höhere Bildschirmauflösung brauchst, und evtl die höheren Farbtiefen, kann ich dir nur zu freeBASIC raten.
BMP-Loader sind schnell zu schreiben, und wenns komplexer werden soll, kannst du ohne Probleme auf DLLs zurückgreifen, z.B. freeImage (=>google).
Mit ein bisschen Glück findest du eine DLL, die in etwa den Befehlssatz der UGL-Lib hat, und dir so die kleinen, so zeitaufwändigen Aufgaben abnimmt zwinkern

Generell kann ich freeBASIC nur empfehlen. Es ist schneller und auf mehr Systemen kompatibel, trotzdem musst du dich nicht besonders umstellen; der Befehlssatz und die Syntax von FB ist fast die selbe wie die von QB.
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 17.05.2005, 22:44    Titel: Mittelpunkt Dreieck für PAINT Antworten mit Zitat

Grundsätzlich ist es vollkommen korrekt, dass die Lage nicht so stark eine Rolle spielt. Allerdings macht eine Optimierung durchaus Sinn, damit man bei einem extrem flachen Dreieck nicht ein Linienpunkt trifft und so das Dreieck nicht gefüllt wird.

Mein Vorschlag: Verwendung des Schwerpunkts. Geometrisch: Man halbiert Strecke P1P2 (=> Punkt D) und teilt P3D im Verhältnis 2:1. Auf den ersten Blick tönt es recht kompliziert, ergibt aber eine extrem einfache Formel:

xs=(x1+x2+x3)/3
ys=(y1+y2+y3)/3

Die mathematische Herleitung wird hier dem Leser überlassen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 18.05.2005, 02:31    Titel: Antworten mit Zitat

@ugl + paint: beides zusammen kann zu bösen überraschungen führen. sobald du ugl initialisiert hast solltest du keinen qb eigenen grafikbefehl mehr verwenden. gründe dafür erspar ich mir jetzt... lies die doku zu ugl es bietet mehrer arten von polygon rasterizern, darunter auch für texturierte, gouraud shaded und p-correct textured triangles

@dreieck füllen: dazu werden meist scanline algorthmen verwendet. google nach triangle rasterization, scanline triangle u.Ä.
_________________
Yagl - yet another gameprogramming library
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 18.05.2005, 14:41    Titel: Antworten mit Zitat

Jo, danke.

Hab jetzt einen Befehl gefunden. uglPolyF

der reicht für den Anfang erstmal.


Ps.: Das Tutorial von dir is echt hammer. Wenn man das gelesen hat, kann man das alles. Voll geil.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Triton



Anmeldungsdatum: 10.09.2004
Beiträge: 155
Wohnort: Berlin

BeitragVerfasst am: 20.05.2005, 15:47    Titel: Antworten mit Zitat

Hab sowas mal für BB geschrieben. Lässt sich vermutlich leicht konvertieren:

http://www.silizium-net.de/bbcodeb5.htm
_________________
Coding: silizium-net.de | Portfolio: Triton.ch.vu
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 -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
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