这是计算从一个 CLLocation 到另一个 CLLocation 的角度(以弧度为单位)的有效方法吗?
-(float)angleFromLocation:(CLLocationCoordinate2D)start toLocation:(CLLocationCoordinate2D)end {
float deltaX = start.latitude - end.latitude;
float deltaY = start.longitude - end.longitude;
float ang = atan2(deltaY, deltaX);
return ang;}
Run Code Online (Sandbox Code Playgroud)
请指教!
任何帮助都感激不尽。
这是我的代码片段 - 它应该围绕原点旋转点,然后将其平移回来
angle = angle * M_PI / 180;
point1.x = (point1.x) * cos(angle) - (point1.y) * sin(angle);
point1.y = (point1.x) * sin(angle) + (point1.y) * cos(angle);
Run Code Online (Sandbox Code Playgroud)
之后,对于应“移动”的平移点,将根据“旋转”后的象限所在的点来说明条件 - 例如,如果它在 1 中,则 x += 2*x 且 y += 2 *y。这里的问题是旋转:例如,对于 130 度的角度,对于点 (100,100),这里是新点 x:CGFloat-3.09086e-06,y:CGFloat100 的坐标。我究竟做错了什么?
所以我试图计算三点之间的角度。例如
a = [14, 140]
b = [13, 120]
c = [12, 130]
d = [11, 110]
|
| c a
|
| d b
|____________
Run Code Online (Sandbox Code Playgroud)
说我想计算 ABC 之间的角度我使用以下代码
#create vectors
ba = a - b
bc = c- b
# calculate angle
cosine_angle = numpy.dot(ba,bc) / (numpy.linalg.norm(ba) * numpy.linalg.norm(bc))
angle = numpy.arccos(cosine_angle)
pAngle = numpy.degrees(angle)
Run Code Online (Sandbox Code Playgroud)
我的脚本运行并且输出角度有效,但我的问题是当我想计算 BCD 时我想要外面的角度而不是里面的角度所以说而不是角度是 120 度我想要角度 240。所以我只想要反-顺时针角度。
不知道如何获得这个值,有人能指出我正确的方向吗?
*编辑:换句话说,我想识别逆时针超过 180 度的角度
*edit2:重复的答案没有回答我的问题,因为我没有使用过很多 java 所以不确定如何在 python 中编码
我正在尝试创建或找到一个计算两点之间的距离和角度的函数,其想法是我可以有两个带有 x、y 坐标的 data.frame,如下所示:
From <- data.frame(x = c(0.5,1, 4, 0), y = c(1.5,1, 1, 0))
To <- data.frame(x =c(3, 0, 5, 1), y =c(3, 0, 6, 1))
Run Code Online (Sandbox Code Playgroud)
现在,我已经成功地使用毕达哥拉斯开发了距离部分:
distance <- function(from, to){
D <- sqrt((abs(from[,1]-to[,1])^2) + (abs(from[,2]-to[,2])^2))
return(D)
}
Run Code Online (Sandbox Code Playgroud)
效果很好:
distance(from = From, to = To)
[1] 2.915476 1.414214 5.099020 1.414214
Run Code Online (Sandbox Code Playgroud)
但我不知道如何获得角度部分。
我尝试调整这个问题的第二个解决方案
angle <- function(x,y){
dot.prod <- x%*%y
norm.x <- norm(x,type="2")
norm.y <- norm(y,type="2")
theta <- acos(dot.prod / (norm.x * norm.y))
as.numeric(theta)
}
x …Run Code Online (Sandbox Code Playgroud) 例如,如果我的角度是 20 度,我可以检查它是否在 [0, 40] 范围内,如下所示:
lower = 0
upper = 40
if angle > lower and angle < upper:
print('done')
Run Code Online (Sandbox Code Playgroud)
然而,如果我的范围跨越 360 度边界(例如下=350 和上=40),这个逻辑将不起作用。我知道我可以用额外的 if/else 块来处理这个问题,但是有什么优雅的方法吗?
我使用正则表达式的经验很少,我需要使用正则表达式解析表示为方位的角度值,例如:
"N45°20'15.3" E"
代表:45度,20分钟,15.3秒,位于NE象限.
限制是:
Python最好或任何其他语言.
谢谢
我试图沿样条线生成一个3d管.我有样条曲线的坐标(x1,y1,z1 - x2,y2,z2 - 等),你可以在图中看到黄色.在那些点我需要生成圆,其顶点将在以后的体育场连接.圆圈需要垂直于花键的两个线段的"角",以形成正确的管.请注意,为了便于说明,这些段保持较低.
[显然我不允许发布图片所以请在此链接查看图片] http://img191.imageshack.us/img191/6863/18720019.jpg
我能够在样条的每个点处计算每个环的顶点,但它们都在相同的平面上,即相同的角度.我需要根据他们的"腿"(例如A和B到C)旋转它们.
我一直在想这个,想到了以下几点:
但是,我真的很困惑这个数学部分.我读到了关于点积的但是返回了一个标量,我不知道如何在这种情况下应用.
有人能指出我正确的方向吗?
[编辑]提供有关情况的更多信息:
我需要构建一个浮点缓冲区,其中包含3个描述顶点位置的组,并将由OpenGL ES连接,给定另一个带索引的缓冲区以形成多边形.
为了给管形状,我首先创建了一个浮点数组,其中3-组描述了3d空间中的控制点.
然后连同段密度的变量,我将这些控制点传递给一个函数,该函数使用这些控制点来创建CatmullRom样条曲线,并以另一个浮点数组的形式返回它,这些浮点数组包含3个描述顶点的组. catmull rom样条.
在每个顶点上,我想创建一个顶点环,它的密度也可以不同(每个环的平滑度/顶点数).
所有以前的顶点(控制点和描述catmull rom样条的那些顶点)都将被丢弃.
只有形成管环的顶点才会传递给OpenGL,而OpenGL又将这些顶点连接起来形成最终的管.
我能够创建catmullrom样条,并在其顶点的位置创建环,但是,它们都在相同角度的平面上,而不是遵循样条路径.
[/编辑]
谢谢!
正如我们在SVG中所知,角度线性梯度是通过设置属性x1,x2,y1,y2.但是,如果我们只得到角度,
1.如何计算x1,y1,x2,y2的结果?
2.这个公式tan(角度)=(y2-y1)/(x2-x1)是否正确?我该如何计算所有参数.
我在XNA制作游戏.我有敌人和球员.敌人应该逐渐转向玩家.他们应该确定是否需要顺时针或逆时针转动,以较短者为准.
通过使用Atan2,我得到了敌人当前面对的角度和它应该面对的角度(敌人和玩家之间的线的角度)作为弧度.
我虽然得到了一些奇怪的行为.让我们在下面的场景中说.敌人可能会朝错误的方向转过来.

我的代码(下面)不断变长,我仍然遇到问题.此代码是敌人类Update方法的一部分.这必须是游戏中需要克服的常见问题.有没有办法解决这个问题?
//this bit is just in case enemy has rotated more than 360 degrees (gets set back to 0)
if (Math.Abs(_blocklist[0]._floor.Revolutions) >= 2)
{
_blocklist[0]._floor.Rotation = 0.0f;
}
//enemy rotation in radians
float blockroat = _blocklist[0]._floor.Rotation;
// vector to player - vector to enemy
_vectToPlayer = playerpos - _blocklist[0].Centre
angletoplayer = (float)(Math.Atan2(_vectToPlayer.Y, _vectToPlayer.X));
diff = blockroat - angletoplayer;
if (diff < -Math.PI)
{
diff += (float) Math.PI;
diff = -diff;
}
else if (diff > Math.PI)
{ …Run Code Online (Sandbox Code Playgroud) 我的应用程序允许您使用各种工具绘制.其中一个可以让你创建一个角度:你点击三次,然后为你绘制一个角度.不幸的是,它变得非常尖,但由于某种原因在某些角度再次圆润.我正在使用
CGContextSetLineCap(context, kCGLineCapRound);
Run Code Online (Sandbox Code Playgroud)
这是一张图片来举例说明我在说什么:

有谁知道是什么原因造成这种或如何解决它所以它一直是圆的?
在大多数情况下,我所做的只是:
CGContextMoveToPoint(context, first.x, first.y);
CGContextAddLineToPoint(context, second.x, second.y);
CGContextAddLineToPoint(context, third.x, third.y);
Run Code Online (Sandbox Code Playgroud)
中风.