The post Draw an Archimedes spiral in C# uses the equation r = A˙θ to generate the points on a spiral. This example is almost exactly the same except it uses the equation to r = A˙e^{B˙θ} to generate its points.

That equation leads to another small issue. When θ is 0, the e^{B˙θ} becomes 1 so r = A. That means the spiral isn’t at its center point.

You can generate points closer to the center if you consider negative values for θ. The question then becomes, “How small does θ need to be?”

If we set θ small enough to make r equal to 0.1, then the resulting point will be less than one pixel away from the spiral’s center. To do that, we solve the equation 0.1 = A˙e^{B˙min_theta} for `min_theta`. The result is `min_theta` = ln(0.1 / A) / B.

The new example is almost exactly the same as the previous example’s version. The only real change is in the `GetSpiralPoints` method, which uses the following code fragment to generate points on a spiral.

`// Return points that define a spiral.
private List GetSpiralPoints(...)
{
...
for (float theta = min_theta; ; theta += dtheta)
{
// Calculate r.
float r = (float)(A * Math.Exp(B * theta));
...
// If we have gone far enough, stop.
if (r > max_r) break;
}
return points;
}`

This code calculates `min_theta` as described above. It then makes variable `theta` loop starting from `min_theta`. The code uses the new formula to calculate r.

As in the previous example, the loop continues until the calculated value for r exceeds the maximum necessary value, at which point the method breaks out of its loop and returns the spiral’s points.

The rest of the example is the same as the previous one. Download the program and see the previous example for additional details.

## About RodStephens

Rod Stephens is a software consultant and author who has written more than 30 books and 250 magazine articles covering C#, Visual Basic, Visual Basic for Applications, Delphi, and Java.