我有两个物体,当我移动一个时,我想得到另一个的Angular 。
例如:
Object1X = 211.000000, Object1Y = 429.000000
Object2X = 246.500000, Object2Y = 441.500000
我已经尝试了以下和太阳下的每一个变化:
double radians = ccpAngle(Object1,Object2);
double degrees = ((radians * 180) / Pi);
但是我只得到了2.949023,在我想要的地方,比如45度。
7条答案
按热度按时间5hcedyr01#
另一个答案有用吗?
How to map atan2() to degrees 0-360
我是这样写的:
运行代码:
这将返回45。
希望这个有用。
vsikbqxv2#
以下是我如何在Swift中为感兴趣的人做的,它基于@bshirley上面的答案,并进行了一些修改,以帮助匹配calayer旋转系统:
这将提供如下所示的坐标系:
用法:
ttisahbt3#
我修改了@tomas的解决方案,使之更加精简,很可能(对我来说)这个数学运算会被频繁调用。
在我的化身中,你必须自己计算这两个点之间的差(或者如果你幸运的话,(0,0)已经是你的一个点了)。计算的值是从(0,0)开始的点的方向。是的,这很简单,如果你真的想的话,你可以内联它。我更喜欢可读性更强的代码。
我还将其转换为函数调用:
如果你不想要负值,你需要自己转换它。负值对我来说很好--不需要做不必要的计算。
我在cocos2d环境中使用它,我是这样称呼它的:(数学上,我们平移平面以使
p0
为原点。因此从p1
中减去p0
(p0
-p0
= {0,0})。平移平面时Angular 不变。)ccpSub
是由cocos2d提供的,它是元组的减法-如果没有可用的元组,您可以自己执行此操作顺便说一句:用
CG___
命名方案来命名这个方法通常是不礼貌的,它把这个函数标识为CoreGraphics
的一部分--所以如果你想把它重命名为MyConvertCGPointToBearing()
或FredLovesWilma()
,那么你应该这样做。gojuced74#
Swift 5中的Tomas' answer
xbp102n05#
两点之间没有夹角。如果你想知道从原点(0,0)到物体的向量之间的夹角,使用标量(点)积:
你使用的math标准库肯定提供了反余弦、标量积和长度的函数。
h79rfbju6#
角的顶点是点(0,0)。
考虑对象1X =x1......对象2Y =y2。
wr98u20j7#
将离开这里。更正代码,加上逆时针旋转轴90度。我用它来触摸。viewCenter是刚刚中心的看法