0
\$\begingroup\$

Im trying to get a list of vectors that go around a circle, but i keep getting the circle to go around several times. I want one circel and the dots to be placed along its circumference. I want the first dot to start at 0 and the last dot to end just before 360. Also i need to be able to calculate the spacing by the ammount of points.

  List<Vector2> pointsInPath = new List<Vector2>();
    private int ammountOfPoints = 5;
    private int blobbSize = 200;
    private Vector2 topLeft = new Vector2(100, 100);
    private Vector2 blobbCenter;
    private int endAngle = 50;
    private int angleIncrementation;
    public Blobb()
    {
        blobbCenter = new Vector2(blobbSize / 2, blobbSize / 2) + topLeft;
        angleIncrementation = endAngle / ammountOfPoints;

        for (int i = 0; i < ammountOfPoints; i++)
        {
            pointsInPath.Add(getPointByAngle(i * angleIncrementation, 100, blobbCenter));
          //  pointsInPath.Add(getPointByAngle(i * angleIncrementation, blobbSize / 2, blobbCenter));
        }
    }

    private Vector2 getPointByAngle(float angle, float distance, Vector2 centre)
    {
        return new Vector2((float)(distance * Math.Cos(angle) ), (float)(distance * Math.Sin(angle))) + centre ;
    }
\$\endgroup\$
1
  • \$\begingroup\$ Set end angle to 2*pi. The spacing between points in radiants is your angleincrement. To get the Euclidean distance between two point the easiest way is calculating the distance of any two neighbouring points of the result. \$\endgroup\$
    – Archy
    Dec 15, 2012 at 8:49

1 Answer 1

3
\$\begingroup\$

Set endAngle to 2π. The spacing between points in radians is your angleIncrement.
To get the Euclidean distance between two point the easiest way is calculating the distance between any two neighbouring points of the result.

Also convert endAngle and angelIncrement to float.

\$\endgroup\$
3
  • \$\begingroup\$ Thanks for the answer. When i do this private int endAngle = 2 * (int)Math.PI ; i dont get anything if ammount of points is higher than 6. Why? \$\endgroup\$
    – Daarwin
    Dec 15, 2012 at 10:11
  • 2
    \$\begingroup\$ @Lautaro because your angleIncrementation is int and you're doing integer division when assigning to it. Make angleIncrementation and endAngle a double and use radians (from 0 to 2π) instead of degrees as Archy suggested. double endAngle = 2*Math.PI; double angleIncrementation; \$\endgroup\$
    – neeKo
    Dec 15, 2012 at 12:54
  • 1
    \$\begingroup\$ Thanks for formatting, I did write that on my phone, same reason I made a comment by mistake :) \$\endgroup\$
    – Archy
    Dec 15, 2012 at 18:49

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .