【问题标题】:Why is cosine used to calculate the x values and sine the y values for an arc?为什么使用余弦来计算弧的 x 值和正弦 y 值?
【发布时间】:2010-08-15 18:05:27
【问题描述】:

我试图理解这个 raphael.js 演示中的数学:

http://raphaeljs.com/pie.js

查看扇区方法:

function sector(cx, cy, r, startAngle, endAngle, params) {
    var x1 = cx + r * Math.cos(-startAngle * rad),
        x2 = cx + r * Math.cos(-endAngle * rad),
        y1 = cy + r * Math.sin(-startAngle * rad),
        y2 = cy + r * Math.sin(-endAngle * rad);
    return paper.path(["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2, "z"]).attr(params);
}

这是实际的演示: http://raphaeljs.com/pie.html

我的数学有点生疏,我正在尝试理解扇形函数 - 给定 startAngle 和 endAngle 参数(每个起点和终点值都在 0 到 360 之间绘制一条弧线),为什么这个函数会起作用?

【问题讨论】:

  • 不要尝试 mathoverflow.net 来做这样的事情——@Steven 不建议这样做,除非问题真的是“研究生研究水平”数学。请改用StackExchange math site

标签: javascript math geometry trigonometry graphing


【解决方案1】:

看看 sin 和 cos 的实际意思是什么:

如果圆上有一个点形成角度 alpha,则 cos alpha 是该点的 x 部分,而 sin alpha 是 y 部分。

这个插图解释了为什么角度被否定。

这意味着,您现在可以指定顺时针角度,这是大多数使用模拟时钟的人更喜欢的角度。

【讨论】:

  • @Luther:正如我在回答中所说,这完全取决于您决定如何处理角度。 cos 与 x 轴固有地无关 - 只是因为该图表测量了与 x 轴的角度。
  • (特别是,这张图没有解释为什么每次都会否定角度。)
  • 否定是什么意思?谢谢。
  • @apphacker:看代码:r * Math.cos(-startAngle * rad)。它占用了cos-startAngle,而不是startAngle。我相信这是由于顺时针测量的角度。有关详细信息,请参阅我的答案。
  • 确实是所有这些答案和 cmets 的组合对我有帮助,但图表确实让事情变得更容易了。谢谢。
【解决方案2】:

这完全取决于您如何对待startAngleendAngle。看起来这将它们视为从水平开始向右(即角度 0 指向东方)和顺时针方向(因此 45 度角指向东南方向。

通常在数学中,我们考虑从水平方向向右开始的角度,但逆时针方向增加......但如果你让非数学家画一个角度,他们可能会从垂直向上(即北)处理它顺时针增加。这看起来像是混合在一起:) 这里没有真正“错误”或“正确”的答案——这都是定义问题。

由于图片很流行,这里是我描述的三个系统,每个系统都假设行的长度为r

普通数学:从 x 轴逆时针方向


(来源:arachsys.com

让街上的人画一个角度(从 y 轴顺时针方向)

此代码使用的角度(从 x 轴顺时针方向)

【讨论】:

  • Jon,你是用什么来生成这张手写但清晰易读的可爱图片的?我过去曾使用过 Zwibbler 来处理此类事情:zwibbler.com
  • @duffymo:一张纸、一支笔和一台扫描仪。
  • 真正的天才 == 简单。不错。
  • 我不知道角度有方向。明白了很多,谢谢。
  • 为了清楚起见,这是 HTML5 的 Canvas 中使用的坐标,角度是顺时针方向并从 x 轴开始。
【解决方案3】:

因为圆心 (cx, cy) 和半径 R 的圆周上的任意点具有以下坐标(它直接来自 cos 和 sin 几何定义 - 对应的导管和斜边的长度之间的比率):

x = cx + R*cos(a)
y = cy + R*sin(a) for  0 <= a < 2π

所以对角度 a 设置限制,您可以定义任意弧。

【讨论】:

    【解决方案4】:

    如果您将 0° 视为水平且 x 增加,将 90° 视为垂直且 y 增加,则为:

    cos(0) = 1
    sin(0) = 0
    
    cos(90) = 0
    sin(90) = 1
    

    您可以通过乘以余弦来改变 x 值,并通过乘以正弦来改变 y 值。

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      相关资源
      最近更新 更多