How to calculate position on a circle with a certain angle?

后端 未结 3 1271
生来不讨喜
生来不讨喜 2021-02-19 04:54

I\'m trying to figure out how I could be able to calculate coordinates on a circle. For simplicity I made some images.

相关标签:
3条回答
  • 2021-02-19 05:22

    One elegant way to accomplish this is using complex numbers, available for example here.

    In pseudo-code:

    z = (x_old + I*y_old)*exp(I*angle);
    x_new = real(z);
    y_new = imag(z);
    

    NOTE: the rotation angle needs to be in radians. NOTE2: this assumes a circle centred at (0,0). Just add a shift if the center is not there.

    0 讨论(0)
  • 2021-02-19 05:31

    Thats how:

    private PointF getPosition(PointF center, float radius, float angle) {
    
        PointF p = new PointF((float) (center.x + radius * Math.cos(Math.toRadians(angle))),
        (float) (center.y + radius* Math.sin(Math.toRadians(angle))));
    
        return p;
    }
    

    This method calculates the position around the center of a circle (center of your view) depending on radius and angle. Angle in degrees.

    The returned PointF will contain the x- and y-coordinate of the calculated position.

    Be aware that 0 degrees is at the very east position of the circle, 270 degrees is in the very north position of the circle:

    enter image description here

    So if the center of your view is at x: 100, y: 100 and you calculate the position with an angle of 0 degrees and a radius of 50, the result will be x: 150, y: 100

    If you use angle 90 degrees and radius 50, the result will be x: 100, y: 150

    It is used here in my charting libary, and it works.

    0 讨论(0)
  • 2021-02-19 05:35

    This need some mathematics here. You need to know if two lines are perpendicular to each other, The multiplication of those two lines gradient should equals to -1.

    Then

    m1=(770-500)/(540-400)=27/14
    

    same way

    m2=(y-770)/(x-540)
    

    (x,y) is the point you want to find.

    Now

    m1*m2=-1
    

    Now we got one equation. You need another since there are two variable needs to find

    You can get another by considering the radius of the circle.

    r=sqrt((540-400)^2+(770-500)^2)
    

    Same way

    r=sqrl((x-540)^2+(y-770)^2)
    

    Now you got two equation and only needs to solve. This will give you two set of coordinates. Since there can be -90 and 90 degrees.

    0 讨论(0)
提交回复
热议问题