Sterne, n-Ecke und anderes
Übersicht

![]() |
ChriseBetreff: Sterne, n-Ecke und anderes |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo!
Ich weiß nicht, ob es sich schon lohnt, hier reinzustellen, aber ich machs jetzt einfach mal ^^ Gestern war mir ein wenig langweilig und dann hab etwas kleines programmiert, dass vielleicht bei manchen nützlich sein könnte, die ein kleines 2D Projekt starten. Leider ist die Performance bei großer Menge nicht mehr so perfekt, wie sie sein könnte, aber das liegt einfach an dem häufigen Line-befehl, der verwendet wird: Hier sind die Grundbefehle: Zeichnet Rechteck, das sich beliebig drehen lässt. ( Wenig nützlich xD) RectTurn(x-Koordinate,y-Koordinate,Breite,Länge,[Winkel],[Rotanteil],[Grünanteil],[Blauanteil]) Zeichnet Stern mit einer beliebigen Anzahl von Ecken: Star(x-Koordinate,y-Koordinate,Sterngröße,Spitzengröße (je näher der Wert an dem Wert der Größe liegt, desto kleiner die Spitzen,Spitzenzahl,[Winkel],[Streckung in Y-Richtung],[Rotanteil],[Grünanteil],[Blauanteil]) Zeichnet eine Sonne: Sun(x-Koordinate,y-Koordinate,Strahlenlänge,Strahlenanzahl,[Winkel],[rauschende Strahlen],[Streckung],[Rotanteil],[Grünanteil],[Blauanteil]) Zeichnet Pentragramm oder andere Gramme: Pentagramm(x-Koordinate,y-Koordinate,Größe,Spitzenzahl (Achtung! Bei bestimmten Werten tritt wegen mathematischer Regeln fehler auf z.b. 11-Eck nicht möglich),[Winkel],[Streckung],[Rotanteil],[Grünanteil],[Blauanteil]) Zeichnet beliebiges n-Eck: n_Eck(x-Koordinate,y-Koordinate,Größe,Eckenzahl,[Winkel],[Streckung],[Rotanteil],[Grünanteil],[Blauanteil]) Zeichnet Spirale (Achtung: Ziemlich schlechte Performance bei hohen Größen- oder Längenwerten.: Spirale(x-Koordinate,y-Koordinate,Größe,Steps (In Wieviele Winkel eine Umrundung aufgeteilt wird.),Länge der Spriale,[Winkel],[Logarithmisch oder nicht (1 nicht logartihmisch. >1 Logarithmisch z.b. 1.01)],[Streckung],[Rotanteil],[Grünanteil],[Blauanteil]) Beispiel-programm: Code: [AUSKLAPPEN] Graphics 400,300,0,2 SetBuffer BackBuffer() wert=0 Include "DrawSymbol_lib.bb" While Not KeyHit(1) Cls w=w+1 Sinus=sinus+1 If wert=0 Then Sun(50,50,50,30,w,0) Sun(150,50,Sin(sinus)*50,30,2*w,0) Star(250,50,50,30,10,w) Star(350,50,50,17,5,w*3) Pentagramm(50,150,50,5,-w) n_Eck(150,150,50,3,w) n_Eck(250,150,50,5,-2*w) Star(350,150,50,10,8,w*3) Else If wert=1 Then Spirale(200,150,1,30,150,w,1.01) EndIf ;FPS FPSZahl=FPSZahl+1 If MilliSecs()-timer >= 1000 Then timer = MilliSecs() FPS=FPSZahl FPSZahl=0 EndIf Text 50,250,"FPS: "+FPS ;/FPS If KeyHit(57) Then wert=1-wert Text 50,265,"Mit Leertaste den Modus umschalten" Flip Wend End User Lib: Code: [AUSKLAPPEN] Function RectTurn(x,y,b,l,g#=0,f=0,red=255,green=255,blue=255) Color red,green,blue Line x,y,Cos(g#)*b+x,Sin(g#)*b+y Line x,y,Cos(g#+90)*l+x,Sin(g#+90)*l+y Line Cos(g#+90)*l+x,Sin(g#+90)*l+y,Cos(g#)*b+(Cos(g#+90)*l+x),Sin(g#)*b+(Sin(g#+90)*l+y) Line Cos(g#)*b+x,Sin(g#)*b+y,Cos(g#)*b+(Cos(g#+90)*l+x),Sin(g#)*b+(Sin(g#+90)*l+y) End Function Function Star(x,y,l,l2,a,g#=0,s#=1,red=255,green=255,blue=255) Color red,green,blue Local amount#=(360/a),amount2#=(180/a),zufall# For i=0 To a Line l2*Cos(g#+amount#*i+amount2#)+x,(l2*Sin(g#+amount#*i+amount2#)*s)+y,l*Cos(g#+amount#*i)+x,(l*Sin(g#+amount#*i)*s)+y Line l2*Cos(g#+amount#*i-amount2#)+x,(l2*Sin(g#+amount#*i-amount2#)*s)+y,l*Cos(g#+amount#*i)+x,(l*Sin(g#+amount#*i)*s)+y Next End Function Function Sun(x,y,l,a,g#=0,z=0,s#=1,red=255,green=255,blue=255) Color red,green,blue Local amount#=(360/a),zufall# For i=0 To a If z>0 Then zufall#=Rnd(z) Line x,y,(l+Rnd(z))*Cos(g#+amount#*i)+x,((l+Rnd(z))*Sin(g#+amount#*i)*s)+y Next End Function Function Pentagramm(x,y,l,a,g#=0,s#=1,red=255,green=255,blue=255) Color red,green,blue Local amount#=(360/a) For i=0 To a Line l*Cos(g#+amount#*i)+x,(l*Sin(g#+amount#*i)*s)+y,l*Cos(g#+amount#*(i+2))+x,(l*Sin(g#+amount#*(i+2))*s)+y Next End Function Function n_Eck(x,y,l,a,g#=0,s#=1,red=255,green=255,blue=255) Color red,green,blue Local amount#=(360/a) For i=0 To a Line l*Cos(g#+amount#*i)+x,(l*Sin(g#+amount#*i))*s+y,l*Cos(g#+amount#*(i+1))+x,(l*Sin(g#+amount#*(i+1)))*s+y Next End Function Function Spirale(x,y,l#,st#=1,a,g#=0,Logr#=0,s#=1,red=255,green=255,blue=255) Color red,green,blue Local amount#=(360/st#),l2#=0 For i=0 To a If Logr=0 Then l2#=l2#+l# If Logr<>0 Then l#=l#*logr l2#=l2#+l# Line (l2-l)*Cos(g#+amount#*i)+x,((l2-l)*Sin(g#+amount#*i))*s+y,l2*Cos(g#+amount#*(i+1))+x,(l2*Sin(g#+amount#*(i+1)))*s+y Next End Function |
||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hoi,
Ich habe das nicht getestet, da ich hier kein BB habe, aber ein kleiner Tip von mir: Du solltest das ganze ohne die Parameter Rot-Anteil, Grün-Anteil und Blau-Anteil machen und einfach in der gerade eingestellten Farbe zeichnen. cu, Smily0412 |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
Smily0412 hat Folgendes geschrieben: Hoi,
Ich habe das nicht getestet, da ich hier kein BB habe, aber ein kleiner Tip von mir: Du solltest das ganze ohne die Parameter Rot-Anteil, Grün-Anteil und Blau-Anteil machen und einfach in der gerade eingestellten Farbe zeichnen. cu, Smily0412 huhu^^ Stimmt... daran hatte ich gestern schonmal gedacht. Ich werds mal raustun ^^ Code: [AUSKLAPPEN] Graphics 400,300,0,2 SetBuffer BackBuffer() wert=0 While Not KeyHit(1) Cls w=w+1 Sinus=sinus+1 If wert=0 Then Sun(50,50,50,30,w,0) Sun(150,50,Sin(sinus)*50,30,2*w,0) Star(250,50,50,30,10,w) Star(350,50,50,17,5,w*3) Pentagramm(50,150,50,5,-w) n_Eck(150,150,50,3,w) n_Eck(250,150,50,5,-2*w) Star(350,150,50,10,8,w*3) Else If wert=1 Then Spirale(200,150,1,30,150,w,1.01) EndIf ;FPS FPSZahl=FPSZahl+1 If MilliSecs()-timer >= 1000 Then timer = MilliSecs() FPS=FPSZahl FPSZahl=0 EndIf Text 50,250,"FPS: "+FPS ;/FPS If KeyHit(57) Then wert=1-wert Text 50,265,"Mit Leertaste den Modus umschalten" Flip Wend End Function RectTurn(x,y,b,l,g#=0,f=0) Line x,y,Cos(g#)*b+x,Sin(g#)*b+y Line x,y,Cos(g#+90)*l+x,Sin(g#+90)*l+y Line Cos(g#+90)*l+x,Sin(g#+90)*l+y,Cos(g#)*b+(Cos(g#+90)*l+x),Sin(g#)*b+(Sin(g#+90)*l+y) Line Cos(g#)*b+x,Sin(g#)*b+y,Cos(g#)*b+(Cos(g#+90)*l+x),Sin(g#)*b+(Sin(g#+90)*l+y) End Function Function Star(x,y,l,l2,a,g#=0,s#=1) Local amount#=(360/a),amount2#=(180/a),zufall# For i=0 To a Line l2*Cos(g#+amount#*i+amount2#)+x,(l2*Sin(g#+amount#*i+amount2#)*s)+y,l*Cos(g#+amount#*i)+x,(l*Sin(g#+amount#*i)*s)+y Line l2*Cos(g#+amount#*i-amount2#)+x,(l2*Sin(g#+amount#*i-amount2#)*s)+y,l*Cos(g#+amount#*i)+x,(l*Sin(g#+amount#*i)*s)+y Next End Function Function Sun(x,y,l,a,g#=0,z=0,s#=1) Local amount#=(360/a),zufall# For i=0 To a If z>0 Then zufall#=Rnd(z) Line x,y,(l+Rnd(z))*Cos(g#+amount#*i)+x,((l+Rnd(z))*Sin(g#+amount#*i)*s)+y Next End Function Function Pentagramm(x,y,l,a,g#=0,s#=1) Local amount#=(360/a) For i=0 To a Line l*Cos(g#+amount#*i)+x,(l*Sin(g#+amount#*i)*s)+y,l*Cos(g#+amount#*(i+2))+x,(l*Sin(g#+amount#*(i+2))*s)+y Next End Function Function n_Eck(x,y,l,a,g#=0,s#=1) Local amount#=(360/a) For i=0 To a Line l*Cos(g#+amount#*i)+x,(l*Sin(g#+amount#*i))*s+y,l*Cos(g#+amount#*(i+1))+x,(l*Sin(g#+amount#*(i+1)))*s+y Next End Function Function Spirale(x,y,l#,st#=1,a,g#=0,Logr#=0,s#=1) Local amount#=(360/st#),l2#=0 For i=0 To a If Logr=0 Then l2#=l2#+l# If Logr<>0 Then l#=l#*logr l2#=l2#+l# Line (l2-l)*Cos(g#+amount#*i)+x,((l2-l)*Sin(g#+amount#*i))*s+y,l2*Cos(g#+amount#*(i+1))+x,(l2*Sin(g#+amount#*(i+1)))*s+y Next End Function |
||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es wundert mich, dass das 11er-gramm nicht funktioniert (und diverse andere auch nicht). Da stehen keine "mathematischen Gesetze" gegen ![]() Du hast nur was falsch gecodet. Solche n-Gramme funktionieren doch bei Polygonen mit ungerader Eckenanzahl so, dass man irgendwo anfängt und den aktuellen Punkt mit dem jeweils übernächsten verbindet und zum Schluss wieder am Anfang ankommt. |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
Triton hat Folgendes geschrieben: Es wundert mich, dass das 11er-gramm nicht funktioniert (und diverse andere auch nicht). Da stehen keine "mathematischen Gesetze" gegen
![]() Du hast nur was falsch gecodet. Solche n-Gramme funktionieren doch bei Polygonen mit ungerader Eckenanzahl so, dass man irgendwo anfängt und den aktuellen Punkt mit dem jeweils übernächsten verbindet und zum Schluss wieder am Anfang ankommt. Nein, die ganz normalen n-Ecke funktionieren einwandfrei. Die rede war von diesen Grammen, also wie z.b. Pentagramm. Die gehen mathematisch wegen ihrer Eckenzahl nicht auf. Das ist auch so, dass man die auf Blatt Papier nicht konstruieren könnte. Das hat irgendwas mit den Winkeln zu tun, soweit ich mich noch an den Mathe Unterricht erinnere ^^ |
||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
FAIL! Tatsächlich funtz das nur nicht bei geraden zahlen , da werden allerdings trotzdem dinge kreiert, wie 3 Ecke Quadrate etc. Hab das vor ewigkeiten im Zug "Converter Winamp AVS->BB" als Testcode gewählt. [Wundere dich nicht über den abstrakten codeaufbau] Code: [AUSKLAPPEN] Graphics 512,512,32,2
Local e#,n#,a#,t#,x#,y# SetBuffer BackBuffer() Origin 256,256 ;int e=7 Repeat ;frame n=e+1; a=0; t=1 If MouseHit(1) ;beat e=(Rand(8)+1)*2+3 EndIf ;point i#=0 fn_start#=0 fn_end#=1 i=fn_start fn_step#=1.0/n While i<fn_end x=-Cos(180/2+a*180/(e/2))*t y=-Sin(180/2+a*180/(e/2))*t a=a+Floor(e/2) i=i+fn_step If i<>0 Line ox#*256,oy#*256,x*256,y*256 EndIf ox#=x oy#=y Wend Flip Cls Forever |
||
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hui, nicht schlecht ^^
Dann hab ich mal wieder was dazugelernt. |
||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group