2D Drawing ... Bug im Kopf

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Then
Beiträge: 231
Registriert: 06.09.2004 13:26
Wohnort: Siegen

2D Drawing ... Bug im Kopf

Beitrag von Then »

Hi Leute !

Gestern habe ich mir scheinbar die letzten Gehirnzellen weg gesof..... :cry:

Ich kriege das nicht mehr hin, dass ich in 2D Linien von der Mitte eines Kreises nach Außen zeichne im Abstand von zb. 20 Grad.... sollten dann ja 18 Linien sein. Ich steh völlig am Schlauch.... Hilfe, Bitte ! :oops:
PB 5.62 / Windows 10 64Bit (i5/32GB/240GB-SSD+3TB-HDD/1050GTX4GB) / 27" Multitouch Monitor

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
#NULL
Beiträge: 2227
Registriert: 20.04.2006 09:50

Re: 2D Drawing ... Bug im Kopf

Beitrag von #NULL »

Code: Alles auswählen

EnableExplicit
Define ww, wh, style, win, canvas, event, quit

ww=800
wh=600
style | #PB_Window_ScreenCentered
style | #PB_Window_SystemMenu
style | #PB_Window_MinimizeGadget

win = OpenWindow(#PB_Any, 50,100, ww,wh, "", style)
AddKeyboardShortcut(win, #PB_Shortcut_Escape, 10)
canvas = CanvasGadget(#PB_Any, 0, 0, ww, wh, #PB_Canvas_Keyboard)

StartDrawing(CanvasOutput(canvas))
  Define a.f = 0
  Define r.f = 100
  While a < 360
    LineXY(ww/2, wh/2, ww/2 + (r * Cos(Radian(a))), wh/2 + (r * Sin(Radian(a))), $00ff00)
    a + 20
  Wend
StopDrawing()

Repeat
  event   = WaitWindowEvent(100)
  Select event
    Case #PB_Event_CloseWindow
      quit = #True
    Case #PB_Event_Menu
      Select EventMenu()
        Case 10
          quit = #True
      EndSelect
  EndSelect
Until quit
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
mk-soft
Beiträge: 3323
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: 2D Drawing ... Bug im Kopf

Beitrag von mk-soft »

Musste kurz überlegen. Urzeiger sinn

Code: Alles auswählen


Define x, y, dx, dx, len

len = 100
x = 0
y = y

For winkel = 0 To 359 Step 20
  alpha.f = Radian(winkel)
  dx = x + Sin(alpha) * len
  dy = y + Cos(alpha) * len
  Debug "w = " + winkel +" dx = " + dx + " dy = " + dy
Next
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
Benutzeravatar
Then
Beiträge: 231
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Re: 2D Drawing ... Bug im Kopf

Beitrag von Then »

Danke, habe jetzt im dem Codearchiv gesucht und diesen Code missbraucht.... aber eurer ist schöner....

DANKE ! :allright:
PB 5.62 / Windows 10 64Bit (i5/32GB/240GB-SSD+3TB-HDD/1050GTX4GB) / 27" Multitouch Monitor

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
Then
Beiträge: 231
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Re: 2D Drawing ... Bug im Kopf

Beitrag von Then »

Herje, ist mir schon peinlich.

Der Code sieht gut aus, aber wie mach ich es, dass er nicht aus der Mitte zeichnet, sondern quasi ca 10 Pixel vor dem Ende des Striches beginnt... es soll also nur der äußere Ring zu sehen sein.... Hätte ich mal in Mathe besser aufgepasst :(
PB 5.62 / Windows 10 64Bit (i5/32GB/240GB-SSD+3TB-HDD/1050GTX4GB) / 27" Multitouch Monitor

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
mk-soft
Beiträge: 3323
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: 2D Drawing ... Bug im Kopf

Beitrag von mk-soft »

Sollte so stimmen ...

Code: Alles auswählen

Define.d x, y, dx, dy, dx1, dx1, len1, dx2, dy2, len2
Define alpha.d

len1 = 100
len2 = 110
x = 0
y = 0

For winkel = 0 To 359 Step 20
  alpha = Radian(winkel)
  dx = Sin(alpha)
  dy = Cos(alpha)
  dx1 = x + dx * len1
  dy1 = y + dy * len1
  dx2 = x + dx * len2
  dy2 = y + dy * len2
  Debug "w = " + winkel +" dx = " + dx + " dy = " + dy
Next
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
Benutzeravatar
Then
Beiträge: 231
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Re: 2D Drawing ... Bug im Kopf

Beitrag von Then »

Danke, habe extra meinen Commodore c16 ausgegraben, weil ich da irgendwo auf einer Kassette so einen code habe 😅

Werde es mir aber morgen früh nochmal angucken. Heute muss ich noch Mr. Puniverse, Boulder Dash und "one man and His Android" spielen.... Wenn der grad mal läuft 🤣
PB 5.62 / Windows 10 64Bit (i5/32GB/240GB-SSD+3TB-HDD/1050GTX4GB) / 27" Multitouch Monitor

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
#NULL
Beiträge: 2227
Registriert: 20.04.2006 09:50

Re: 2D Drawing ... Bug im Kopf

Beitrag von #NULL »

Du kannst bei LineXY() auch dem Startpunkt einen Radius mit draufgeben, z.B. 0.5 mal deinen vollen Radius, dann zeichnet er von der Hälfte bis außen (1.0*Radius). Genauso kannst du den End-Radius auch verringern, z.B. (0.75*Radius).

Code: Alles auswählen

EnableExplicit
Define ww, wh, style, win, canvas, event, quit

ww=800
wh=600
style | #PB_Window_ScreenCentered
style | #PB_Window_SystemMenu
style | #PB_Window_MinimizeGadget

win = OpenWindow(#PB_Any, 50,100, ww,wh, "", style)
AddKeyboardShortcut(win, #PB_Shortcut_Escape, 10)
canvas = CanvasGadget(#PB_Any, 0, 0, ww, wh, #PB_Canvas_Keyboard)

StartDrawing(CanvasOutput(canvas))
  Define a.f = 0
  Define r.f = 100
  While a < 360
    
    ; grün: ganze Linie von r 0 (Mittelpunkt) zu r (ganz außen)
    LineXY(ww/2, 
           wh/2, 
           ww/2 + (r * Cos(Radian(a))), 
           wh/2 + (r * Sin(Radian(a))), 
           $00ff00)
    
    ; rot: Teilradius, *0 wäre Mittelpunkt, *1.0 wäre ganz außen also voll r
    Define r1.f = r * 0.5
    Define r2.f = r * 0.75
    LineXY(ww/2 + (r1 * Cos(Radian(a))), 
           wh/2 + (r1 * Sin(Radian(a))), 
           ww/2 + (r2 * Cos(Radian(a))), 
           wh/2 + (r2 * Sin(Radian(a))), 
           $0000ff)
    
    a + 20
  Wend
StopDrawing()

Repeat
  event   = WaitWindowEvent(100)
  Select event
    Case #PB_Event_CloseWindow
      quit = #True
    Case #PB_Event_Menu
      Select EventMenu()
        Case 10
          quit = #True
      EndSelect
  EndSelect
Until quit
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten