Circle Function -> Kreisausschnitte zeichnen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

ToeB

Betreff: Circle Function -> Kreisausschnitte zeichnen

BeitragDo, Aug 23, 2007 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Meine Function die ich vorstellen möchte : Circle
Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()
w = 50
h = 100
HidePointer()
Repeat
Color Rand(255),Rand(255),Rand(255)
For I = 1 To 360
For o = 0 To 3
st = -ATan2(MouseX()-(100+(o*150)),MouseY()-100)+180
Circle 100+(o*150),100,w,h,st,i,o
Next
a =(a + 1  )Mod 11
b#=(b#+ 0.9)Mod 11
Circle MouseX()-10,MouseY()-10,20,20,b*36,a*36,2
Flip
Delay 10
Cls
If KeyHit(1) Then End
Next
w = Rand(20,100)
h = Rand(20,100)
Until KeyHit(1)
End

Function Circle(x,y,width,height,st,en,m=0)
For i = 0 To en
Plot x+Sin(-(i+(st+180)))*width,y+Cos(-(i+(st+180)))*height
Next
Select m
Case 1
Line x,y,x+Sin(-(en+(st+180)))*width,y+Cos(-(en+(st+180)))*height
Line x,y,x+Sin(-(0+(st+180)))*width,y+Cos(-(0+(st+180)))*height
Case 2
For ii# = 0 To en Step 0.02
Line x,y,x+Sin(-(ii+(st+180)))*width,y+Cos(-(ii+(st+180)))*height
Next
Case 3
Plot x,y
Text x,y,en+"°",1,1
End Select
End Function


Legende
x = x Position
y = y Position
width = Breite der Ovals
height = Höhe des Ovals
st = Start Winkel der kreises
en = End winkel der kreises
m = Modus (0 = Leerer Kreis;1 = Kreis mit Enden(Pizza);2 = Ausgefüllter Kreis;3 = GradAnzeige in der Mitte

Viel spaß und ich freue mich über ein feedback !

mfg Crack93 Wink
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

ZaP

BeitragDo, Aug 23, 2007 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir ruckelt das ab 250° ganz stark... gibts davon auch ne amd64 Variante, die würde bei mir besser laufen Very Happy
Starfare: Worklog, Website (download)

ToeB

BeitragDo, Aug 23, 2007 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hä ? sry aba wasis amd64 ?

mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

BladeRunner

Moderator

BeitragDo, Aug 23, 2007 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ganze ist leider nur bedingt echtzeittauglich, und noch dazu etwas ungenau, da du über die Step-Angabe in deiner For next versuchst alle Punkte zu erreichen. Bei sehr großen Kreisen wird auch .02 nicht ausreichend fein sein und es wird Fehlpixel geben, bei kleineren Durchmessern werden unzählige lienien mehrfach gezogen. Ich würde An deiner Stelle einen anderen Weg wählen um den Kreisrand zu berechnen und dann eine Flutfüllung durchführen, das sollte um ein mehrfaches schneller sein.
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

ToeB

BeitragDo, Aug 23, 2007 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Also du meinst sowas wie
Code: [AUSKLAPPEN]
For i = radius to 0 Step -1
MachenenKreis(i)
Next


So macht der den kreis immer enger bis zu null... geht das ?

mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

the FR3AK

BeitragDo, Aug 23, 2007 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Gerade die For-Next schleifen solltest du meiden...

Also bei mir hängts total...naja ok hab auch nicht den besten PC Confused

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Aug 23, 2007 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Folgende Zeile ist ein wirkliches Gräul:

Code: [AUSKLAPPEN]
For ii# = 0 To en Step 0.02

Da ich es selber wissen wollte, habe ich mal wieder mein Kopf ein bisschen angestrengt und raus gekommen ist folgender Testcode:

Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer FrontBuffer()

radius#=100
xp=200
yp=200

Oval xp-3,yp-3,7,7,0




For x#=0 To radius Step 1

   ac#=ACos(x/radius)
   Plot xp+x/radius*100,yp+Sin(ac)*radius

Next

WaitKey

Ich denke das dieser selbsterklärend ist. Eine Füllroutine kannst du dir dann mit den schnellen Recht x,y,xs,ys,1 machen. Dann wäre das ganz auch schon nahezu Echtzeittauglich.

edit1: Hier nochmal überarbeitet und mit Füllroutine:

Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer FrontBuffer()

radius#=200
xp=200
yp=200

For x#=0 To radius Step 1
   wt%=Sin(ACos(x/radius))*radius
   Rect xp+x,yp-wt,1,wt*2,1
   Rect xp-x,yp-wt,1,wt*2,1
Next

WaitKey
 

Darren

BeitragDi, Aug 28, 2007 23:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Weder das von Crack noch das von Hectic sind zu gebrauchen.

Hab bei meinen Dreiecken auch lange gegrübelt, wie ich das doch lösen könnte, doch wie euch beiden ist mir bis jetzt nix schnelles eingefallen... kommt aber noch! Razz
MFG Darren

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Aug 28, 2007 23:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hä? Nicht schnell genug? Wie schnell willst du das denn mit 2D-Befehlen auf BB-Bordmitteln denn noch haben? Very Happy

Hier ein Geschwindigkeitstest (mit dem Mausrad kannst du den Radius verändern):

Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer BackBuffer()

radius#=200
xp=200
yp=200

While Not KeyHit(1)
   xp=MouseX()
   yp=MouseY()
   radius=radius+MouseZSpeed()*10

   For x#=0 To radius Step 1
      wt%=Sin(ACos(x/radius))*radius
      Rect xp+x,yp-wt,1,wt*2,1
      Rect xp-x,yp-wt,1,wt*2,1
   Next

   Text 20,20,fps:msc=MilliSecs()
   If msc=>mts mts=msc+1000:fps=frm:frm=1 Else frm=frm+1

   Flip 0
   Cls
Wend
End


Du kannst aber mit Step 2 und Rect -Breite 2 etwas an Geschwindigkeit gewinnen, aber dabei auch an Qualität verlieren.

edit2: Solltest du tatsächlich das unmögliche geschafft haben, so zeigst du hier die Lösung, ja?

edit1: Ausser du suchst was anderes als gefüllte Kreise...

SpionAtom

BeitragMi, Aug 29, 2007 0:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hat jetzt nur nichts mehr mit Kreisausschnitten zu tun, oder?
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group