在圆上按度数找到一个点?

9
假设我们有一个100x100的坐标系统,如下图所示。0,0是其左上角,50,50是其中心点,100,100是其右下角,以此类推。
现在我们需要从中心向外画一条线。我们知道线的角度,但需要计算其终点的坐标。你认为最好的方法是什么?
例如,如果线的角度为45度,则其终点坐标大约为75,15。
(下方为图片,请见谅)

4
一只野生的三角函数出现了!三角函数使用正弦和余弦技能!效果超群! - Matt Ball
虽然你的问题很基础,但你可以在www.mathoverflow.com上提出与数学相关的问题。 - Pedery
在这种情况下,把代码实现来做数学运算可能需要在这里问一下? - Wouter Simons
3个回答

13

你需要使用三角函数 sincos

类似这样:

theta = 45
// theta = pi * theta / 180      // convert to radians.
radius = 50
centerX = 50
centerY = 50
p.x = centerX + radius * cos(theta)
p.y = centerY - radius * sin(theta)

请记住,大多数实现都假定您使用弧度并且正y朝上。


@aioobe 您在编辑答案时出现错误,应该是 centerY + radius * sin(theta) 而不是 centerY - radius * sin(theta) - thinklinux
@aioobe 您这样做只是为了更改y的原点,使y从顶部开始而不是从中心开始。但是应该使用centerY变量来完成此操作,因为它是原点,所以您可以保留方程中的“+”符号,因为它是正确的,只需将“centerY”更改为“-50”即可 :) 您可以在此处查看已接受的答案https://dev59.com/5XRA5IYBdhLWcg3wwwvD 如果您将其保留在那里,就会混淆如何更改y的原点。 - thinklinux
我这么做是因为y轴被反转了。下面的答案也是这样做的。 - aioobe

3
使用单位圆来计算X和Y,但因为您的半径为50,请乘以50。 http://en.wikipedia.org/wiki/Unit_circle 添加偏移量(50,50),就完成了。
X = 50 + (cos(45) * 50) ~ 85,36
Y = 50 - (sin(45) * 50) ~ 14,65

上面的内容恰好是45度。
编辑:刚刚注意到Y轴被倒置了。

PS:我看到一些关于实现中弧度的评论。将角度转换为弧度的最简单方法是查找您的实现中的宏或其他内容。通常会有像deg_to_rad之类的东西。如果没有,请使用math aioobe提供的公式:pi * x / 180x * (pi/180) - Wouter Simons

2
首先,您需要计算X和Y坐标,就像圆是单位圆(半径为1)一样。给定角度的X坐标由cos(angle)给出,Y坐标由sin(angle)给出。大多数sin和cos的实现都采用弧度作为输入,因此需要进行转换(1度=0.0174532925弧度)。现在,由于您的坐标系实际上不是单位圆,因此您需要将结果值乘以圆的半径。在这个给定的示例中,您需要乘以50,因为您的圆在每个方向上延伸50个单位。最后,使用单位圆坐标系假定您的圆心位于原点(0,0)。为了解决这个问题,从计算出的X和Y坐标中加入(或减去)您的中心偏移量。在您的情况下,从(0,0)偏移量为正X方向50,负Y方向50。
例如:
cos(45) = x ~= .707
sin(45) = y ~= .707

.707*50 = 35.35

35.35+50 = 85.35
abs(35.35-50) = 14.65

因此,结束线段的坐标将是(85.35, 14.65)。请注意,您选择的语言中可能有内置的度数转弧度函数,我提供了单位转换以供参考。编辑:糟糕,一开始使用的是度数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接