I sort of reproduced your project because I was intrigued... ;-)

Without seeing your code I'll start with some general remarks that might explain this, based on what you describe:

1) if you're using a 'standard' function to determine whether the sweep is clockwise or counter-clockwise then note that in maths generally the y axis starts at the bottom while in VB.NET it starts at the top so a function like that would give the 'reverse' result.

2) also note that your calculated angles seem to be based on starting (correctly) on the rightmost point of the circle but going

Now after some trial and error I came up with the code below, which processes both your examples correctly as you can see in the image.

prj.zip

Without seeing your code I'll start with some general remarks that might explain this, based on what you describe:

1) if you're using a 'standard' function to determine whether the sweep is clockwise or counter-clockwise then note that in maths generally the y axis starts at the bottom while in VB.NET it starts at the top so a function like that would give the 'reverse' result.

2) also note that your calculated angles seem to be based on starting (correctly) on the rightmost point of the circle but going

**counter-clockwise**while the DrawArc documentation states it is defined as**clockwise**. In your first example it doesn't matter as all circles are intersected by the vertical line (from point 2 to 15), just the sweep angle would have to be reversed. But then of course if you combine this with the previous note, a 'flipped' canvas would negate this second note...!Now after some trial and error I came up with the code below, which processes both your examples correctly as you can see in the image.

```
Dim rct As RectangleF = GetCircle(x1, y1, x2, y2, x3, y3) ' circle from 3 points: http://www.regentsprep.org/Regents/math/geometry/GCG6/RCir.htm
Dim xcc As Single = rct.X + rct.Width / 2
Dim ycc As Single = rct.Y + rct.Height / 2
Dim reversesweep As Boolean = ccw(x1, y1, x2, y2, x3, y3) ' from http://en.wikipedia.org/wiki/Graham_scan
startangle = get_angle(x1 - xcc, y1 - ycc)
endangle = get_angle(x3 - xcc, y3 - ycc)
sweepangle = endangle - startangle
If reversesweep Xor (sweepangle > 0) Then sweepangle += -360 * Math.Sign(sweepangle)
gr.DrawArc(pn, rct, startangle, sweepangle)
```

Obviously, whether this helps you may depend largely on the compatibility of the called functions with yours. But for starters I think this bit together with the remarks above may enable you to determine the problem. If you think my exact implementation can help you further, please look at the attached project which by now includes some nice bells and whistles (like moving the individual points and calculate the result real-time).prj.zip