【问题标题】:finding a dot on a circle by degree?按度数在圆上找到一个点?
【发布时间】:2016-03-24 19:02:10
【问题描述】:

假设我们有一个 100x100 的坐标系,如下所示。 0,0 是它的左上角,50,50 是它的中心点,100,100 是它的右下角,等等。

现在我们需要从中心向外画一条线。我们知道直线的角度,但需要计算它的终点坐标。 您认为最好的方法是什么?

例如,如果直线的角度是 45 度,那么它的终点坐标大约是 75,15。

【问题讨论】:

  • 一个狂野的Trigonometry出现了!使用三角函数Sine and Cosine!超级有效!
  • 尽管您的问题非常基础,但您可以在 www.mathoverflow.com 上提出与数学相关的问题。
  • 在这种情况下,得到一个代码实现来做数学可能需要在这里问它?

标签: math geometry


【解决方案1】:

您需要使用三角函数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)
  • @aioobe 您这样做只是为了更改 y 的原点,因此 y 将从顶部开始,而不是从中心开始。但这应该使用用于原点的 centerY 变量来完成,这样您就可以在等式中保留 + 符号,因为它是正确的,然后将 centerY 更改为 -50 :) 您可以看到接受的答案这里stackoverflow.com/questions/839899/… 如果你这样离开它,那么如何更改 y 的原点会令人困惑。
  • 我这样做是因为 y 轴是倒置的。下面的答案也是如此。
【解决方案2】:

使用单位圆计算X和Y,但是因为你的半径是50,所以乘以50

http://en.wikipedia.org/wiki/Unit_circle

加上偏移量 (50,50),bob 就是你的叔叔

X = 50 + (cos(45) * 50) ~ 85,36
Y = 50 - (sin(45) * 50) ~ 14,65

上面恰好是45度。

编辑:刚刚看到 Y 轴是倒置的

【讨论】:

  • PS:我在实现中看到了一些关于弧度的 cmets。将度数转换为弧度的最简单方法是在您的实现中查找宏或任何内容。通常有类似 deg_to_rad 之类的东西。如果没有,请使用提供的数学 aioobe:pi * x / 180x * (pi/180)
【解决方案3】:

首先,您需要计算 X 和 Y 坐标,就好像圆是单位圆(半径 1)。给定角度的 X 坐标由cos(angle) 给出,Y 坐标由sin(angle) 给出。 sincos 的大多数实现都以弧度为单位进行输入,因此需要进行转换(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)。

注意,您选择的语言中可能有一个内置的度数到弧度的函数,我提供了单位转换以供参考。

编辑:哎呀,一开始使用度数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    相关资源
    最近更新 更多