4

我不太擅长数学或几何,但我想以增加的角度绘制一些线段。我想画的是当你举起手并张开手指时的样子:从一个共同点开始并以它们之间具有相等差异的角度展开的线条。

我试过这个:

len = 300;
angle = 10;

for (i = 0; i <= 5; ++i) {
    endPointX = 50 + len * Math.cos(angle);
    endPointY = 50 + len * Math.tan(angle);
    draw.Line(50, 50, endPointX, endPointY);
    angle += 10;
}

但是,这是完全错误的,会产生类似这样的东西

http://i.stack.imgur.com/taX40.png

但我想要这样的东西(糟糕的 mspaint,抱歉):

http://i.stack.imgur.com/8xfpp.png

什么是正确的数学?

4

4 回答 4

9

您的问题中有两个不同的问题,我将分别介绍。


这是您的情况的 ASCII 图片:

                   乙
                   +
                  /|
                 / |
                / |
               / |
         长 / | 是的
             / |
            / |
           / |
          / __|
         / θ | |
        +----------+
      A×C

这是一个直角三角形。它有三个方面:

  • 图中与 90° 角相对的对角边称为斜边,长度为len。斜边是您要绘制的内容。
  • 垂直边是与角相对的边θ,有一个长度y
  • 水平边是与角相邻的边θ,有一个长度x

鉴于上图,以下等式成立:

cos(θ) = x/len
sin(θ) = y/len

这些方程式是另一种说法:

  • 角的余弦等于相邻边的长度除以斜边的长度。
  • 角的正弦等于对边的长度除以斜边的长度。

求解 和 的方程时xy您得到:

x = len * cos(θ)
y = len * sin(θ)

所以你想要sin()and cos(),而不是cos()and tan()。如果该点A不在原点,则需要偏移xy相加,如下所示:

x = len * cos(θ) + 50
y = len * sin(θ) + 50

使用 和 的值xy您可以找到B三角形上点的坐标,从而能够绘制线条。


此外,假设您使用 Java 编程,该类中的三角函数Math期望以弧度为单位的角度,而不是度数。许多提供三角函数的编程语言都是这样的。

弧度和度数测量相同的东西,但是以度为单位的完整旋转从0到 ,360°而以弧度为单位的完整旋转从0

要将角度以度为单位转换为弧度,请将角度乘以π/180。在 Java 中,常量πMath.PI.

例如,10° 的角度等于10 * π/180π/18弧度。

于 2011-04-05T23:46:01.453 回答
0

首先,你想要cosand sin,而不是cosand tan

其次,大多数数学库以弧度而不是度数执行三角函数。确实10有很大的不同!要将度数转换为弧度,请乘以(pi/180)

于 2011-04-05T23:46:12.117 回答
0

你得到不均匀的视角的原因是每次你添加 10 你实际上是在围绕圆圈旋转线 1.6 次。

数学函数期望角度以弧度为单位,而不是度数。

360 度 = 2*Math.PI 弧度。

写“2*Math.PI/36.0”而不是 10

此外,使用 sin 而不是 tan。

于 2011-04-05T23:48:17.883 回答
0

你不应该使用棕褐色,而是使用罪恶。如果我没记错的话,应该是这样的: Math.cos(angle/180); -Math.sin(角度/180); 对罪的否定很重要。

于 2011-04-05T23:49:29.417 回答