Seite 1 von 1

2D Drawing ... Bug im Kopf

Verfasst: 01.09.2019 17:38
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:

Re: 2D Drawing ... Bug im Kopf

Verfasst: 01.09.2019 17:49
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

Re: 2D Drawing ... Bug im Kopf

Verfasst: 01.09.2019 17:57
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

Re: 2D Drawing ... Bug im Kopf

Verfasst: 01.09.2019 18:21
von Then
Danke, habe jetzt im dem Codearchiv gesucht und diesen Code missbraucht.... aber eurer ist schöner....

DANKE ! :allright:

Re: 2D Drawing ... Bug im Kopf

Verfasst: 21.09.2021 17:33
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 :(

Re: 2D Drawing ... Bug im Kopf

Verfasst: 22.09.2021 11:09
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

Re: 2D Drawing ... Bug im Kopf

Verfasst: 22.09.2021 20:23
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 🤣

Re: 2D Drawing ... Bug im Kopf

Verfasst: 24.09.2021 17:49
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