Shop OBEX P1 Docs P2 Docs Learn Events
Graphics.spin and other graphics questions — Parallax Forums

Graphics.spin and other graphics questions

tmshawtmshaw Posts: 14
edited 2009-12-09 07:02 in Propeller 1
Hello. Here is what I want to do: draw 2 large, filled white circles on the screen. Inside each is a smaller black circle that will move when I tilt the display (it has a built in accelerometer). I can't seem to figure out how to draw circles using graphics.spin...maybe you just can't and that is the answer I will have to be happy with. lol

I see that I can draw a "point" and set it to be sized between 1 and 15, but after 15 it starts doing squares... Where in the code is that determined? Can I change something to make bigger sizes of points?

Also, what if I wanted to draw semi-circles (circle cut in half)?

I see that there are vector definitions down in the "Dat" part of the graphics_demo.spin file. Those are in pasm code? Should I try to do my shapes that way?

Also, I am getting the Hydra Book and CD for Xmas, but until then, are there any tutorials on graphics that anyone knows of?

Comments

  • Bob Lawrence (VE1RLL)Bob Lawrence (VE1RLL) Posts: 1,720
    edited 2009-12-08 03:56
    tmshaw said...
    Also, I am getting the Hydra Book and CD for Xmas, but until then, are there any tutorials on graphics that anyone knows of?


    Try this one from Bamse: Here is an article I wrote to explain how to write a graphics driver in 50 lines of code.

    67.104.29.60/forums/default.aspx?m=277812&f=33&p=1

    And his other one:

    Multi Cog Tile Driver Tutorial

    http://forums.parallax.com/showthread.php?p=746260

    Post Edited (Bob Lawrence (VE1RLL)) : 12/8/2009 4:02:03 AM GMT
  • VIRANDVIRAND Posts: 656
    edited 2009-12-08 09:28
    Lets see...
    gr.color(1) 'well you pick a color
    CX:=128 'center of circle CX,CY
    CY:=96
    R:= 90 'radius 90
    Repeat Y from 0 to R '***add a space before all these next lines:

    X:= ^|| ((R*R)-(Y*Y)) ' ^|| is probably wrong, I mean use square root
    gr.plot(CX+X,CY+Y) ' filled circle one quadrant
    gr.line(CX+X,CY)

    gr.plot(CX-X,CY-Y) 'filled circle, opposite quadrant
    gr.line(CX-X,CY)

    gr.plot(CX-X,CY+Y) 'filled circle, remaining quadrants
    gr.line(CX-X,CY)
    gr.plot(CX+X,CY-Y)
    gr.line(CX+X,CY)

    To make just the outside of circles, remove the gr.lines. Parts will be missing. These shoud fix it:
    gr.plot(CX+Y,CY+X)
    gr.plot(CX-Y,CY-X)
    gr.plot(CX+Y,CY-X)
    gr.plot(CX-Y,CY+X)

    Double check my square root sign, which I really think is the wrong one.

    I hope this math is correct, which I've used often before.
    I tend to make dumb mistakes in code that I can't run now; if so, maybe you can get the general idea and fix them.
    It uses pythgorean theorem which is simpler than a sine and cosine method.
    You can make half circles by skipping some quadrant lines.
    Also, sorry, but this is not a complete program, only what you need to make big circles.
    You also need to define the var x,y,cx,cy,r and what another program uses to start GRAPHICS and TV objects.

    Post Edited (VIRAND) : 12/8/2009 9:58:50 AM GMT
  • Beau SchwabeBeau Schwabe Posts: 6,568
    edited 2009-12-08 17:37
    Your making this much more complex than it needs to be...


        x := 0                      'X center
        y := 0                      'Y center
        r := 80                     'circle radius
        c := 2                      'circle Color 
        Fill := 1                   '0 - don't Fill ; 1 - Fill
    
    StartAngle := Angle(45)
    StopAngle  := Angle(270)
    
    gr.color(c)
    gr.arc(x, y, r, r, StartAngle, 1, StopAngle - StartAngle, Fill * 3)
    
    'Add this subroutine 
    PUB Angle(N)                     'Helps make 13-bit angle conversion more human readable
        Result := (N * 1024) / 45
    
    

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Beau Schwabe

    IC Layout Engineer
    Parallax, Inc.

    Post Edited (Beau Schwabe (Parallax)) : 12/8/2009 5:48:27 PM GMT
  • tmshawtmshaw Posts: 14
    edited 2009-12-08 22:49
    Awesome! You guys are the best!
    I am now making circles like nobody's business!

    One other quick question:
    Where is the color of the background screen defined? So that I could change it to something other than black?
  • Beau SchwabeBeau Schwabe Posts: 6,568
    edited 2009-12-09 05:51
    tmshaw.

    Towards the beginning of the main PUB routine, you will see where the colors are defined ... The value set for 'Color 0' is the background color.

    See if this link helps.... http://forums.parallax.com/showthread.php?p=849087

      'init colors
      [b]repeat[/b] i [b]from[/b] 0 to 63
        colors[noparse][[/noparse]*i] := $BB_07_1C_02
    {
                      Color 3
                      |  Color 2
                      |  |  Color 1
                      |  |  |  Color 0
                      |  |  |  | 
        colors[noparse][[/noparse]*i] := $BB_06_1C_BB
    }
    
    
    

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Beau Schwabe

    IC Layout Engineer
    Parallax, Inc.

    Post Edited (Beau Schwabe (Parallax)) : 12/9/2009 5:56:11 AM GMT
  • tmshawtmshaw Posts: 14
    edited 2009-12-09 07:02
    Thanks Beau. You are the King of Information. I am reading up on the various threads and links given here and de-silva's asm tutorials. Hopefully, I will have not so many questions from here on out. [noparse]:)[/noparse]
Sign In or Register to comment.