以增加的角度绘制线条

Pri*_*iam 4 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;
}
Run Code Online (Sandbox Code Playgroud)

然而,这是完全错误的,并产生这样的东西

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

但是我想要这样的东西(糟糕的mspaint,对不起):

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

什么是正确的数学?

In *_*ico 9

你的问题有两个不同的问题,我将介绍每个问题.


这是您的情况的ASCII图片:

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

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

  • 图中与90°角相对的对角线称为斜边并具有长度len.斜边是你想要画的东西.
  • 垂直侧是与角度相对的侧面?并且具有长度y.
  • 水平侧是与角度相邻的侧面?并且具有长度x.

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

cos(?) = x/len
sin(?) = y/len
Run Code Online (Sandbox Code Playgroud)

这些方程是另一种说法:

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

当求解方程xy,你会得到:

x = len * cos(?)
y = len * sin(?)
Run Code Online (Sandbox Code Playgroud)

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

x = len * cos(?) + 50
y = len * sin(?) + 50
Run Code Online (Sandbox Code Playgroud)

随着价值观xy,你可以找到点的坐标B上的三角形,从而能够得出你的线条.


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

弧度度测量同样的事情,但在度完全旋转,从去0360°,而在弧度完整循环,从去02?.

要将角度(以度为单位)转换为弧度,请将角度乘以?/180.在Java中,常量?Math.PI.提供.

例如,10°的角度等于10 * ?/180或等于?/18弧度.