Dreieck zeichnen
Übersicht

![]() |
StepTigerBetreff: Dreieck zeichnen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja hallo mal wieder ![]() Hat eventuell jemand einen Lösungsansatz für mich, wie ich eine Funktion ein Dreieck zeichnen lassen kann? Es muss ein gefülltest Dreieck sein, und da liegt mein Problem. Danke ![]() |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
also:
erst mal eine kleine skizze: Code: [AUSKLAPPEN] 1 2 3 das sein mal das dreieck. 1.)rechnes mit winkelfunktionen alle punkte zwischen 2 und 3 2.)linien malen von den punkten nach punkt 1 |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich geh davon aus, dass das ungenau und langsam wird, oder irre ich?
*edit* Probieren geht über Studieren, deshalb: Code: [AUSKLAPPEN] ;maldreieck
Graphics 800,600,32,2 Local px[3] Local py[3] While Not KeyDown(1) If MouseHit(1) px[x]=MouseX() py[x]=MouseY() x=x+1 EndIf c=0 For y=0 To 2 If px[y]>0 And py[y]>0 Then c=c+1 Next If c=3 Line px[0],py[0],px[1],py[1] Line px[1],py[1],px[2],py[2] Line px[2],py[2],px[0],py[0] wink#=ATan2(px[2]-px[1],py[2]-py[1]) dis#=Sqr((px[1]-px[2])^2+(py[1]-py[2])^2) For c=0 To dis# tx=px[1]+Sin(wink#)*c ty=py[1]+Cos(wink#)*c Line tx,ty,px[0],py[0] Next EndIf Flip Wend End exakt das Problem, welches ich meinte ^^ |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
- Zuletzt bearbeitet von StepTiger am Do, Nov 02, 2006 21:43, insgesamt einmal bearbeitet
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Alternativen gibt es mit 2D befehlen nicht, ausser es gäbe auch ein Bresenham Dreieck. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hätte da schon eine idee:
wie kann man berechnen, ob ein punkt in einem dreieck liegt? |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
-Ermittle den Punkt mit der kleinsten y-Koord.
-beachte den Sonderfall dass 2 Punkte die kleinste haben können. -von dem niedrigsten y ausgehend setze für jedes y das folgt die Werte in die Steigungsgleichung ein und ermittle so das passende x. -Zeichne eine Linie (per Rect, das ist schneller) von x1,y nach x2,y. - Beachte hier den Fall dass ein Eckpunkt erreicht wird und Du von da an eine andere Steigungsgleichung benötigst. -selbstredend ist darauf zu achten dass es bei den Steigungsgleichungen Sonderformen für Achsenparallelen gibt. Im Gegensatz zu obigem Vorschlag führt dieser hier nicht zu Winkelbedingten Lücken im Dreieck, Er sollte auch schneller sein. Allerdings für Echtzeit wohl eher immer noch unbrauchbar. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
irgendwie ist das sehr kompliziert.
Gibts da keinen einfachen satz für? |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
DerHase |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kuck mal >>>HIER<<<. Da hat es unten auch nen Link zu einer anderen Dreieck Funktion, bei der musst Du aber die Punkte im Uhrzeigersinn setzen. | ||
Play Satyr! |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
eigentlich sollte es nicht ungenau werden... | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
sieht nicht ungenau aus ![]() Danke Hase |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wozu haben wir eigentlich ein heimisches Codearchiv?
https://www.blitzforum.de/foru...php?t=6316 |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn du statt auf einer seite alle punkte zu berechnen und zu verbinden auf drei seiten nacheinander die punkte berechnest, gehts auch(getestet bei 350*350 dreieck= ...kann meinen code bei gelegenheit auch mal hochladen
Code: [AUSKLAPPEN] Graphics 400,400
SetBuffer BackBuffer() Repeat Cls x1=200+Cos(y)*180 y1=200+Sin(y)*-180 x2=200+Cos(y+120)*180 y2=200+Sin(y+120)*-180 x3=200+Cos(y+240)*180 y3=200+Sin(y+240)*-180 Line x1,y1,x2,y2 Line x2,y2,x3,y3 Line x3,y3,x1,y1 Text x1,y1,"1" Text x2,y2,"2" Text x3,y3,"3" winkel=ATan2(x2-x1,y2-y1)+90 For i#=1 To Sqr((X2-X3)^2+(Y2-Y3)^2)-1 Step 1 Line x2+Cos(winkel)*i,y2+Sin(winkel)*-i,x3,y3 Next winkel=ATan2(x3-x2,y3-y2)+90 For i#=1 To Sqr((X2-X3)^2+(Y2-Y3)^2)-1 Step 1 Line x3+Cos(winkel)*i,y3+Sin(winkel)*-i,x1,y1 Next winkel=ATan2(x1-x3,y1-y3)+90 For i#=1 To Sqr((X2-X3)^2+(Y2-Y3)^2)-1 Step 1 Line x1+Cos(winkel)*i,y1+Sin(winkel)*-i,x2,y2 Next r=r+1 r=r Mod 255 g=g-2 If g<0 Then g=255+g b=b+2 b=b Mod 255 Color r,g,b Text 0,0,r+","+g+","+b y=y+2 y=y Mod 360 Flip Until KeyHit(1) |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn alle Seiten des Dreiecks die Länge 100 haben, zeichnest du aber 300 Linien.
Bei meinem Verfahren dagegen nur 100. Bei einem größeren Dreieck kommt es zudem zu leeren Flecken. |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
hast ja recht...dafür berechnest du aber pro linie 2 punkte, das macht dann 200 punkte bei dir und 300 bei mir...mist, deins ist wirklcih besser.. ![]() ![]() ![]() ![]() |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
najo, hab mich eh schon lange entschieden ^^
aber danke soweit ![]() |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab mal die "BladeRunner Theorie" umgesetzt
Und es ist schnell....! Code: [AUSKLAPPEN] Dim FPS (3)
Graphics 800 ,600 SetBuffer BackBuffer () Repeat Cls x1 = 400 + Cos (y) * 180 y1 = 300 + Sin (y) * 180 x2 = 400 + Cos (y + 120) * 180 y2 = 300 + Sin (y + 120) * 180 x3 = 400 + Cos (y + 240) * 180 y3 = 300 + Sin (y + 240) * 180 y = y + 1 y = y Mod 360 Fill_Triangle (x1,y1,x2,y2,x3,y3) Text 10 ,10,FPS (1) : FPS (2) = FPS (2) + 1 : If MilliSecs () > FPS (3) + 999 Then FPS (1) = FPS (2) : FPS (2) = 0 : FPS (3) = MilliSecs () Flip 0 Until KeyHit (1) End Function Fill_Triangle(x1,y1,x2,y2,x3,y3) ;einsortieren der y_koordinate nach Höhe (kleinste zuerst) If y1 > y2 Then x= x1 : x1 = x2 : x2 = x: y= y1 : y1 = y2 : y2 = y If y2 > y3 Then x= x2 : x2 = x3 : x3 = x: y= y2 : y2 = y3 : y3 = y If y1 > y2 Then x= x1 : x1 = x2 : x2 = x: y= y1 : y1 = y2 : y2 = y ;fertig sortiert Grad_1x2# =ATan2 (y1-y2,x1-x2) Grad_1x3# = ATan2 (y1-y3,x1-x3) Grad_3x2# = ATan2(y3-y2,x3-x2) If y2<>y1 Then For i = 0 To y2 - y1 -1 Lines ((i / Tan (Grad_1x3) ) + x1,y1 + i, ( i / Tan (Grad_1x2) ) + x1) Next End If If y2<>y3 Then For i = y2 - y3 To 0 Lines ((i / Tan (Grad_1x3) ) + x3,y3 + i, (i / Tan (Grad_3x2) ) + x3) Next End If End Function Function Lines (x1,y1,x2) If x1 < x2 Then Rect x1,y1,x2-x1,1 Else Rect x2,y1,x1-x2,1 End If End Function |
||
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei mir zwischen 400 und 430 FPS.
Nicht schlecht. Aber nicht so gut wie meins (420-450 FPS) ![]() |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group