Fluchtpunkt setzen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Mr Hopp

Betreff: Fluchtpunkt setzen

BeitragDo, Okt 13, 2005 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Wir haben in Kunst gerade mit Fluchtpunkten angefangen. Das berühmteste Beispiel ist dann ja wohl: Fluchtpunkt in der Mitte, Straße vom Vordergrund zum Fluchtpunkt, Häuser zur rechten, bäume zur linken.
Hier schon mal ein erster Schritt (Ja, das soll eine Straße mit Horizont sein)

Code: [AUSKLAPPEN]
Graphics 800, 600, 32, 1
SetBuffer BackBuffer()

Repeat
Cls

x = MouseX()
y = MouseY()
Line x-5, y-5, x+5, y+5
Line x-5, y+5, x+5, y-5

Line 0, y, 800, y

Line 100, 600, x, y
Line 700, 600, x, y
Line 400, 600, x, y



Flip
Until KeyHit(1)
End


Wie kann ich jetzt Linien auf den Fluchtpunkt zu zeichnen, allerdings nicht bis zu ihm hin, ine gestrichelte Linie statt durchgezogen zum Beispiel? Wie lauten die Formeln(bestimmt cos, sin, oder?)

Mfg Mr Hopp

BtbN

BeitragDo, Okt 13, 2005 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh Gott ^^
Wenn ichs richtig sehe, willst du ne art 3D-Redner-Engine bauen.

Zu deiner Frage: ATan2 ist dein Freund!
 

Mr Hopp

BeitragFr, Okt 14, 2005 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, vielen Dank schonmal, für die Hilfe, ABER ich habe ein weiteres Problem:

Code: [AUSKLAPPEN]
Graphics 800,600,32,1
SetBuffer BackBuffer()

Function zeichne(x, y, entf, laenge)
x1# = MouseX()
y1# = MouseY()
winkel = (450-ATan2(MouseX()-x, MouseY()-y)) Mod 360
;Line x+Cos(winkel)*entf, y+Sin(winkel)*entf, x+Cos(winkel)*(entf+laenge), y+Sin(winkel)*(entf+laenge)
Line x+Cos(winkel)*(entf/(y1#/300)), y+Sin(winkel)*(entf/(y1/300)), x+Cos(winkel)*((entf+laenge)/(y1/300)), y+Sin(winkel)*((entf+laenge)/(y1/300))
End Function

Repeat
Cls

x = MouseX()
y = MouseY()

Line 0, y, 800, y; Horizont

Line 100, 600, x, y;Straßenrandlinie
Line 700, 600, x, y;      -||-

zeichne(400, 600, 10, 50);Markierungsstreifen
zeichne(400, 600, 100, 50)

;Kreuz setzen
Color 255, 0, 0
Line x-5, y-5, x+5, y+5
Line x-5, y+5, x+5, y-5
Color 255, 255, 255

Flip
Until KeyHit(1)
End


Funktion zeichne:
Paramenter: Bezugspunkt_x, Bezugspunkt_y, Entfernung vom Bezugspunkt, Länge der Linie

Diese Funktin zeichnet eine Linie in einem festgelegten Abstand von einem Bezugspunkt für eine bestimmte Länge zum Fluchtpunkt hin.

Jetz das Problem:

Wird der Fluchtpunkt verschoben, müssen die Striche kürzer, bzw. länger werden, die Formel haut allerdings noch nich so wirklich hin. Im Komentar schonmal ein (nicht funktionierender) Ansatz.
 

$tankY

BeitragSa, Okt 15, 2005 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mir den code net angeschaut, aber du müsstest wissen, wie der abstand sein soll, den ziehste dann vom abstand zwischen den beiden ab und teilst das ergebnis durch zewi, oder sonst die anzahl der striche, glaub ich ma

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Okt 15, 2005 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach doch eine 3D-Funktion die dir eine 3D-Koordinate in 2D umrechnet. Dann hast du das Problem mit über-Überschneidung der Lininen nicht.
 

Mr Hopp

BeitragSo, Okt 16, 2005 9:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie soll das denn gehen? Und $tankY, wie soll ich dann z.B. eine Linie eines Hauses erstellen, von der kein Element den Fluchtpunkt berrührt? Vll hättest du dir doch besser den Code ansehen sollen.

Spikespine

BeitragSo, Okt 16, 2005 12:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich hab dir schnell mal etwas gebastelt.
Du kannst beliebig viele Linien erstellen, sie sind alle mit der Schablone lin (Type).
Jetzt gehen die Linien nicht mehr bis zum Fluchtpunkt, sondern du kannst die Länge in Prozent einstellen:
0 -> keine Linie
100 -> Linie bis zum Fluchtpunkt
50 -> Linie nur halbe Länge
usw.

Wo die Linie anfängt, bestimmt nicht nur die Koordinate, sondern auch die Prozentpunkte..... man ist das kompliziert zu erklären, ich hoffe du verstehst es auch so Confused

naja, hier mal der code:
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()
HidePointer

Type lin
Field x,y ;startkoordinaten
Field sta# ;in prozent
Field sto# ;in prozent
End Type


;::::LINIEN ERSTELLEN:::::
l.lin = New lin
l\x = 50
l\y = 600
l\sta = 0
l\sto = 80

l.lin = New lin
l\x = 750
l\y = 600
l\sta = 00
l\sto = 80

l.lin = New lin
l\x = 400
l\y = 600
l\sta = 10
l\sto = 30

l.lin = New lin
l\x = 400
l\y = 600
l\sta = 40
l\sto = 55


Repeat
Cls
mx = MouseX()
my = MouseY()

Color 128,128,128
Rect 0,my,800,1


txty = 0
For l.lin = Each lin
w# = (ATan2(mx-l\x,my-l\y)+360) Mod 360
s# = Sqr((mx-l\x)^2+(my-l\y)^2)

sx# = mx + (1-l\sta/100)*s *-Sin(w)
sy# = my + (1-l\sta/100)*s *-Cos(w)

ex# = mx + (1-l\sto/100)*s *-Sin(w)
ey# = my + (1-l\sto/100)*s *-Cos(w)

Color 255,255,255
Line sx#,sy#,ex#,ey#

Color 200,200,200
Text 0,txty,w
Text 100,txty,s

Text 300,txty,sx+\"|\"+sy+\" : \"+Int(ex)+\"|\"+Int(ey)
txty = txty + 12
Next


Rect mx-2,my-2,4,4,0


Flip
Until KeyHit(1)
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax
 

Mr Hopp

BeitragSo, Okt 16, 2005 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, vielen Dank, ich werd's mir mal anschauen

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group