以增加的角度绘制线条

时间:2011-04-05 23:41:09

标签: drawing lines angle

我不擅长数学或几何,但我想以越来越大的角度绘制一些线段。我想要绘制的东西就像你举起手并将手指分开一样:从公共点开始的线条以及它们之间具有相同差异的角度展开。

我试过这个:

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 个答案:

答案 0 :(得分:9)

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


以下是您的情况的ASCII图片:

                   B
                   +
                  /|
                 / |
                /  |
               /   |
         len  /    | y
             /     |
            /      |
           /       |
          /      __|
         / θ    |  |
        +----------+
      A      x       C

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

  • 图片中与90°角相对的对角线称为斜边,长度为len。斜边是你想要绘制的东西。
  • 垂直边是与角度θ相对的一侧,长度为y
  • 水平边是与角度θ相邻的边,长度为x

鉴于上述说明,以下等式是正确的:

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

这些方程是另一种说法:

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

在求解xy的等式时,您得到:

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

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

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

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


另外,假设您使用Java进行编程,Math类中的三角函数期望角度为radians,而不是度。许多提供三角函数的编程语言都是这样的。

弧度和度数衡量同样的事情,但完整的度数旋转从0360°,而弧度的完整旋转从0变为

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

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

答案 1 :(得分:0)

首先,您需要cossin,而不是costan

其次,大多数数学库以弧度执行三角函数,而不是度。所以10确实是一个非常大的差异!要将度数转换为弧度,请乘以(pi/180)

答案 2 :(得分:0)

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

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

360度= 2 * Math.PI弧度。

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

另外,使用sin而不是tan。

答案 3 :(得分:0)

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