Calculating the angle between the line defined by two points

前端 未结 6 1162
我在风中等你
我在风中等你 2020-11-28 08:17

I\'m currently developing a simple 2D game for Android. I have a stationary object that\'s situated in the center of the screen and I\'m trying to get that object to rotate

6条回答
  •  北海茫月
    2020-11-28 08:36

    A few answers here have tried to explain the "screen" issue where top left is 0,0 and bottom right is (positive) screen width, screen height. Most grids have the Y axis as positive above X not below.

    The following method will work with screen values instead of "grid" values. The only difference to the excepted answer is the Y values are inverted.

    /**
     * Work out the angle from the x horizontal winding anti-clockwise 
     * in screen space. 
     * 
     * The value returned from the following should be 315. 
     * 
     * x,y -------------
     *     |  1,1
     *     |    \
     *     |     \
     *     |     2,2
     * 
    * @param p1 * @param p2 * @return - a double from 0 to 360 */ public static double angleOf(PointF p1, PointF p2) { // NOTE: Remember that most math has the Y axis as positive above the X. // However, for screens we have Y as positive below. For this reason, // the Y values are inverted to get the expected results. final double deltaY = (p1.y - p2.y); final double deltaX = (p2.x - p1.x); final double result = Math.toDegrees(Math.atan2(deltaY, deltaX)); return (result < 0) ? (360d + result) : result; }

提交回复
热议问题