Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Drawing an ellipse
#18
(07-03-2023, 06:24 AM)SMcNeill Wrote:
(07-03-2023, 06:19 AM)PhilOfPerth Wrote:
(07-03-2023, 06:16 AM)SMcNeill Wrote:
Code: (Select All)

{{CodeStart}}
{{Cl|Screen}} {{Cl|_NewImage}}({{Text|800|#F580B1}}, {{Text|600|#F580B1}}, {{Text|32|#F580B1}})

{{Cl|Dim}} TransRed {{Cl|As}} {{Cl|_Unsigned}} {{Cl|Long}}
{{Cl|Dim}} TransGreen {{Cl|As}} {{Cl|_Unsigned}} {{Cl|Long}}
{{Cl|Dim}} TransBlue {{Cl|As}} {{Cl|_Unsigned}} {{Cl|Long}}
TransRed = {{Cl|_RGBA}}({{Text|255|#F580B1}}, {{Text|0|#F580B1}}, {{Text|0|#F580B1}}, {{Text|128|#F580B1}})
TransGreen = {{Cl|_RGBA}}({{Text|0|#F580B1}}, {{Text|255|#F580B1}}, {{Text|0|#F580B1}}, {{Text|128|#F580B1}})
TransBlue = {{Cl|_RGBA}}({{Text|0|#F580B1}}, {{Text|0|#F580B1}}, {{Text|255|#F580B1}}, {{Text|128|#F580B1}})

{{Cl|Call}} {{Text|CircleFill|#55FF55}}({{Text|100|#F580B1}}, {{Text|100|#F580B1}}, {{Text|75|#F580B1}}, TransRed)
{{Cl|Call}} {{Text|CircleFill|#55FF55}}({{Text|120|#F580B1}}, {{Text|120|#F580B1}}, {{Text|75|#F580B1}}, TransBlue)

{{Cl|Call}} {{Text|EllipseFill|#55FF55}}({{Text|550|#F580B1}}, {{Text|100|#F580B1}}, {{Text|150|#F580B1}}, {{Text|75|#F580B1}}, TransBlue)
{{Cl|Call}} {{Text|EllipseFill|#55FF55}}({{Text|570|#F580B1}}, {{Text|120|#F580B1}}, {{Text|150|#F580B1}}, {{Text|75|#F580B1}}, TransGreen)

{{Cl|Call}} {{Text|EllipseTilt|#55FF55}}({{Text|200|#F580B1}}, {{Text|400|#F580B1}}, {{Text|150|#F580B1}}, {{Text|75|#F580B1}}, {{Text|0|#F580B1}}, TransGreen)
{{Cl|Call}} {{Text|EllipseTilt|#55FF55}}({{Text|220|#F580B1}}, {{Text|420|#F580B1}}, {{Text|150|#F580B1}}, {{Text|75|#F580B1}}, {{Text|3.14|#F580B1}} / {{Text|4|#F580B1}}, TransRed)

{{Cl|Call}} {{Text|EllipseTiltFill|#55FF55}}({{Text|0|#F580B1}}, {{Text|550|#F580B1}}, {{Text|400|#F580B1}}, {{Text|150|#F580B1}}, {{Text|75|#F580B1}}, {{Text|3.14|#F580B1}} / {{Text|6|#F580B1}}, TransRed)
{{Cl|Call}} {{Text|EllipseTiltFill|#55FF55}}({{Text|0|#F580B1}}, {{Text|570|#F580B1}}, {{Text|420|#F580B1}}, {{Text|150|#F580B1}}, {{Text|75|#F580B1}}, {{Text|3.14|#F580B1}} / {{Text|4|#F580B1}}, TransGreen)

{{Cl|End}}

{{Cl|Sub}} {{Text|CircleFill|#55FF55}} (CX {{Cl|As}} {{Cl|Integer}}, CY {{Cl|As}} {{Cl|Integer}}, R {{Cl|As}} {{Cl|Integer}}, C {{Cl|As}} {{Cl|_Unsigned}} {{Cl|Long}})
    {{Text|<nowiki>' CX = center x coordinate</nowiki>|#919191}}
    {{Text|<nowiki>' CY = center y coordinate</nowiki>|#919191}}
    {{Text|<nowiki>'  R = radius</nowiki>|#919191}}
    {{Text|<nowiki>'  C = fill color</nowiki>|#919191}}
    {{Cl|Dim}} Radius {{Cl|As}} {{Cl|Integer}}, RadiusError {{Cl|As}} {{Cl|Integer}}
    {{Cl|Dim}} X {{Cl|As}} {{Cl|Integer}}, Y {{Cl|As}} {{Cl|Integer}}
    Radius = {{Cl|Abs}}(R)
    RadiusError = -Radius
    X = Radius
    Y = {{Text|0|#F580B1}}
    {{Cl|If}} Radius = {{Text|0|#F580B1}} {{Cl|Then}} {{Cl|PSet}} (CX, CY), C: {{Cl|Exit Sub}}
    {{Cl|Line}} (CX - X, CY)-(CX + X, CY), C, BF
    {{Cl|While}} X > Y
        RadiusError = RadiusError + Y * {{Text|2|#F580B1}} + {{Text|1|#F580B1}}
        {{Cl|If}} RadiusError >= {{Text|0|#F580B1}} {{Cl|Then}}
            {{Cl|If}} X <> Y + {{Text|1|#F580B1}} {{Cl|Then}}
                {{Cl|Line}} (CX - Y, CY - X)-(CX + Y, CY - X), C, BF
                {{Cl|Line}} (CX - Y, CY + X)-(CX + Y, CY + X), C, BF
            {{Cl|End If}}
            X = X - {{Text|1|#F580B1}}
            RadiusError = RadiusError - X * {{Text|2|#F580B1}}
        {{Cl|End If}}
        Y = Y + {{Text|1|#F580B1}}
        {{Cl|Line}} (CX - X, CY - Y)-(CX + X, CY - Y), C, BF
        {{Cl|Line}} (CX - X, CY + Y)-(CX + X, CY + Y), C, BF
    {{Cl|Wend}}
{{Cl|End Sub}}

{{Cl|Sub}} {{Text|EllipseFill|#55FF55}} (CX {{Cl|As}} {{Cl|Integer}}, CY {{Cl|As}} {{Cl|Integer}}, a {{Cl|As}} {{Cl|Integer}}, b {{Cl|As}} {{Cl|Integer}}, C {{Cl|As}} {{Cl|_Unsigned}} {{Cl|Long}})
    {{Text|<nowiki>' CX = center x coordinate</nowiki>|#919191}}
    {{Text|<nowiki>' CY = center y coordinate</nowiki>|#919191}}
    {{Text|<nowiki>'  a = semimajor axis</nowiki>|#919191}}
    {{Text|<nowiki>'  b = semiminor axis</nowiki>|#919191}}
    {{Text|<nowiki>'  C = fill color</nowiki>|#919191}}
    {{Cl|If}} a = {{Text|0|#F580B1}} {{Cl|OR (boolean)|Or}} b = {{Text|0|#F580B1}} {{Cl|Then}} {{Cl|Exit Sub}}
    {{Cl|Dim}} h2 {{Cl|As}} {{Cl|_Integer64}}
    {{Cl|Dim}} w2 {{Cl|As}} {{Cl|_Integer64}}
    {{Cl|Dim}} h2w2 {{Cl|As}} {{Cl|_Integer64}}
    {{Cl|Dim}} x {{Cl|As}} {{Cl|Integer}}
    {{Cl|Dim}} y {{Cl|As}} {{Cl|Integer}}
    w2 = a * a
    h2 = b * b
    h2w2 = h2 * w2
    {{Cl|Line}} (CX - a, CY)-(CX + a, CY), C, BF
    {{Cl|DO...LOOP|Do While}} y < b
        y = y + {{Text|1|#F580B1}}
        x = {{Cl|Sqr}}((h2w2 - y * y * w2) \ h2)
        {{Cl|Line}} (CX - x, CY + y)-(CX + x, CY + y), C, BF
        {{Cl|Line}} (CX - x, CY - y)-(CX + x, CY - y), C, BF
    {{Cl|Loop}}
{{Cl|End Sub}}

{{Cl|Sub}} {{Text|EllipseTilt|#55FF55}} (CX, CY, a, b, ang, C {{Cl|As}} {{Cl|_Unsigned}} {{Cl|Long}})
    {{Text|<nowiki>'  CX = center x coordinate</nowiki>|#919191}}
    {{Text|<nowiki>'  CY = center y coordinate</nowiki>|#919191}}
    {{Text|<nowiki>'  a = semimajor axis</nowiki>|#919191}}
    {{Text|<nowiki>'  b = semiminor axis</nowiki>|#919191}}
    {{Text|<nowiki>' ang = clockwise orientation of semimajor axis in radians (0 default)</nowiki>|#919191}}
    {{Text|<nowiki>'  C = fill color</nowiki>|#919191}}
    {{Cl|For}} k = {{Text|0|#F580B1}} {{Cl|To}} {{Text|6.283185307179586|#F580B1}} + {{Text|.025|#F580B1}} {{Cl|Step}} {{Text|.025|#F580B1}}
        i = a * {{Cl|Cos}}(k) * {{Cl|Cos}}(ang) + b * {{Cl|Sin}}(k) * {{Cl|Sin}}(ang)
        j = -a * {{Cl|Cos}}(k) * {{Cl|Sin}}(ang) + b * {{Cl|Sin}}(k) * {{Cl|Cos}}(ang)
        i = i + CX
        j = -j + CY
        {{Cl|If}} k <> {{Text|0|#F580B1}} {{Cl|Then}}
            {{Cl|Line}} -(i, j), C
        {{Cl|Else}}
            {{Cl|PSet}} (i, j), C
        {{Cl|End If}}
    {{Cl|Next}}
{{Cl|End Sub}}

{{Cl|Sub}} {{Text|EllipseTiltFill|#55FF55}} (destHandle&, CX, CY, a, b, ang, C {{Cl|As}} {{Cl|_Unsigned}} {{Cl|Long}})
    {{Text|<nowiki>'  destHandle& = destination handle</nowiki>|#919191}}
    {{Text|<nowiki>'  CX = center x coordinate</nowiki>|#919191}}
    {{Text|<nowiki>'  CY = center y coordinate</nowiki>|#919191}}
    {{Text|<nowiki>'  a = semimajor axis</nowiki>|#919191}}
    {{Text|<nowiki>'  b = semiminor axis</nowiki>|#919191}}
    {{Text|<nowiki>' ang = clockwise orientation of semimajor axis in radians (0 default)</nowiki>|#919191}}
    {{Text|<nowiki>'  C = fill color</nowiki>|#919191}}
    {{Cl|Dim}} max {{Cl|As}} {{Cl|Integer}}, mx2 {{Cl|As}} {{Cl|Integer}}, i {{Cl|As}} {{Cl|Integer}}, j {{Cl|As}} {{Cl|Integer}}
    {{Cl|Dim}} prc {{Cl|As}} {{Cl|_Unsigned}} {{Cl|Long}}
    {{Cl|Dim}} D {{Cl|As}} {{Cl|Integer}}, S {{Cl|As}} {{Cl|Integer}}
    D = {{Cl|_DEST (function)|_Dest}}: S = {{Cl|_SOURCE (function)|_Source}}
    prc = {{Cl|_RGB32}}({{Text|255|#F580B1}}, {{Text|255|#F580B1}}, {{Text|255|#F580B1}}, {{Text|255|#F580B1}})
    {{Cl|If}} a > b {{Cl|Then}} max = a + {{Text|1|#F580B1}} {{Cl|Else}} max = b + {{Text|1|#F580B1}}
    mx2 = max + max
    tef& = {{Cl|_NewImage}}(mx2, mx2)
    {{Cl|_Dest}} tef&
    {{Cl|_Source}} tef&
    {{Cl|For}} k = {{Text|0|#F580B1}} {{Cl|To}} {{Text|6.283185307179586|#F580B1}} + {{Text|.025|#F580B1}} {{Cl|Step}} {{Text|.025|#F580B1}}
        i = max + a * {{Cl|Cos}}(k) * {{Cl|Cos}}(ang) + b * {{Cl|Sin}}(k) * {{Cl|Sin}}(ang)
        j = max + a * {{Cl|Cos}}(k) * {{Cl|Sin}}(ang) - b * {{Cl|Sin}}(k) * {{Cl|Cos}}(ang)
        {{Cl|If}} k <> {{Text|0|#F580B1}} {{Cl|Then}}
            {{Cl|Line}} (lasti, lastj)-(i, j), prc
        {{Cl|Else}}
            {{Cl|PSet}} (i, j), prc
        {{Cl|End If}}
        lasti = i: lastj = j
    {{Cl|Next}}
    {{Cl|Dim}} xleft(mx2) {{Cl|As}} {{Cl|Integer}}, xright(mx2) {{Cl|As}} {{Cl|Integer}}, x {{Cl|As}} {{Cl|Integer}}, y {{Cl|As}} {{Cl|Integer}}
    {{Cl|For}} y = {{Text|0|#F580B1}} {{Cl|To}} mx2
        x = {{Text|0|#F580B1}}
        {{Cl|While}} {{Cl|Point}}(x, y) <> prc {{Cl|AND (boolean)|And}} x < mx2
            x = x + {{Text|1|#F580B1}}
        {{Cl|Wend}}
        xleft(y) = x
        {{Cl|While}} {{Cl|Point}}(x, y) = prc {{Cl|AND (boolean)|And}} x < mx2
            x = x + {{Text|1|#F580B1}}
        {{Cl|Wend}}
        {{Cl|While}} {{Cl|Point}}(x, y) <> prc {{Cl|AND (boolean)|And}} x < mx2
            x = x + {{Text|1|#F580B1}}
        {{Cl|Wend}}
        {{Cl|If}} x = mx2 {{Cl|Then}} xright(y) = xleft(y) {{Cl|Else}} xright(y) = x
    {{Cl|Next}}
    {{Cl|_Dest}} destHandle&
    {{Cl|For}} y = {{Text|0|#F580B1}} {{Cl|To}} mx2
        {{Cl|If}} xleft(y) <> mx2 {{Cl|Then}} {{Cl|Line}} (xleft(y) + CX - max, y + CY - max)-(xright(y) + CX - max, y + CY - max), C, BF
    {{Cl|Next}}
    {{Cl|_Dest}} D: {{Cl|_Dest}} S
    {{Cl|_FreeImage}} tef&
{{Cl|End Sub}}
{{CodeEnd}}

Those are the routines we worked up ages ago for Circles and Ellipses.  They should handle whatever you need for them too, and they've been optimized for speed with QB64PE.  Wink

Thank you Steve. But OldMoses has given me what I needed (see previous post)  Big Grin

I cleaned that mess up. If you look above your post, you can see the example and routines which I was trying to post instead.  That gobbledygook isn't going to be of use to you, or anyone else.  Big Grin

Wow!
 Thanks Steve; It's shown me some of the incredible things that can be done with this language.
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, W.A.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply


Messages In This Thread
Drawing an ellipse - by PhilOfPerth - 07-01-2023, 08:14 AM
RE: Drawing an ellipse - by bplus - 07-01-2023, 10:04 AM
RE: Drawing an ellipse - by PhilOfPerth - 07-01-2023, 11:34 AM
RE: Drawing an ellipse - by OldMoses - 07-01-2023, 05:23 PM
RE: Drawing an ellipse - by bplus - 07-01-2023, 05:34 PM
RE: Drawing an ellipse - by PhilOfPerth - 07-01-2023, 11:26 PM
RE: Drawing an ellipse - by mnrvovrfc - 07-02-2023, 01:07 AM
RE: Drawing an ellipse - by PhilOfPerth - 07-02-2023, 01:21 AM
RE: Drawing an ellipse - by OldMoses - 07-02-2023, 02:12 AM
RE: Drawing an ellipse - by PhilOfPerth - 07-03-2023, 12:35 AM
RE: Drawing an ellipse - by mnrvovrfc - 07-03-2023, 01:40 AM
RE: Drawing an ellipse - by OldMoses - 07-03-2023, 03:52 AM
RE: Drawing an ellipse - by PhilOfPerth - 07-03-2023, 06:12 AM
RE: Drawing an ellipse - by SMcNeill - 07-03-2023, 06:16 AM
RE: Drawing an ellipse - by PhilOfPerth - 07-03-2023, 06:19 AM
RE: Drawing an ellipse - by SMcNeill - 07-03-2023, 06:24 AM
RE: Drawing an ellipse - by PhilOfPerth - 07-03-2023, 07:04 AM
RE: Drawing an ellipse - by mnrvovrfc - 07-03-2023, 06:34 AM
RE: Drawing an ellipse - by johnno56 - 07-03-2023, 07:06 AM
RE: Drawing an ellipse - by SMcNeill - 07-03-2023, 07:18 AM
RE: Drawing an ellipse - by bplus - 07-03-2023, 12:13 PM
RE: Drawing an ellipse - by OldMoses - 07-04-2023, 06:18 PM
RE: Drawing an ellipse - by bplus - 07-04-2023, 11:31 PM
RE: Drawing an ellipse - by PhilOfPerth - 07-05-2023, 01:58 AM
RE: Drawing an ellipse - by bplus - 07-05-2023, 02:28 AM
RE: Drawing an ellipse - by PhilOfPerth - 07-05-2023, 02:47 AM
RE: Drawing an ellipse - by OldMoses - 07-06-2023, 09:30 PM



Users browsing this thread: 22 Guest(s)