增加角度的绘制线

问题描述:

我不擅长数学或几何学,但我想绘制一些增加角度的线段。我想画的东西就像你握住你的手并将你的手指分开一样:从一个共同点开始并以相同的角度展开的线条。增加角度的绘制线

我已经试过这样:

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

这是什么数学?

+0

http://en.wikipedia.org/wiki/Radian – YXD 2011-04-05 23:45:36

+0

将sin()替换为tan(),并将角度增加0.1。 – 2011-04-05 23:45:47

+0

也就是说,角度应该是弧度而不是度数。 360度= 2 * pi弧度。 2的因素是历史错误之一。 – YXD 2011-04-05 23:47:13

在你的问题中有两个单独的问题,我将覆盖每个问题。


这里是你的情况的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弧度。

+0

只是好奇心,你会如何与人物45º角线?我试着划线,划线和减号,但看起来很丑(¯-)。 – rraallvv 2017-11-15 14:50:35

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

你看起来不均匀的角度的原因是,每当你加10时,你实际上是围绕着圆圈旋转1.6倍。

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

360度= 2 * Math.PI弧度。

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

此外,使用罪,而不是晒黑。

+0

Mathemagic。谢谢。 – Priam 2011-04-05 23:54:50

你不应该使用棕褐色,但罪恶。如果我没有记错,它应该是这样的: Math.cos(angle/180); -Math.sin(angle/180); 对罪的负面影响很重要。