增加角度的绘制线
我不擅长数学或几何学,但我想绘制一些增加角度的线段。我想画的东西就像你握住你的手并将你的手指分开一样:从一个共同点开始并以相同的角度展开的线条。增加角度的绘制线
我已经试过这样:
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
这是什么数学?
在你的问题中有两个单独的问题,我将覆盖每个问题。
这里是你的情况的ASCII图片:
B + /| /| /| / | len/ | y / | / | / | / __| /θ | | +----------+ A x C
这是一个直角三角形。它有三面:
- 图中与90°角相对的对角线一侧称为斜边,其长度为
len
。斜边是你想要画的东西。 - 垂直面是与角度
θ
相反的一面,其长度为y
。 - 水平边是与角
θ
相邻的边,其长度为x
。
鉴于上述说明以下等式为真:
cos(θ) = x/len
sin(θ) = y/len
这些方程的另一种说法:
- 的角度的余弦等于所述相邻的长度侧边除以斜边的长度。
- 角度的正弦等于对边的长度除以斜边的长度。
当求解x
和y
公式,你会得到:
x = len * cos(θ)
y = len * sin(θ)
所以,你要sin()
和cos()
,不cos()
和tan()
。如果点A
是不在原点,则需要通过另外抵消x
和y
,像这样:
x = len * cos(θ) + 50
y = len * sin(θ) + 50
随着x
和y
的值,你可以找到点B
坐标上的三角形,从而能够画出你的线条。
而且,假设你在Java编程中,在Math
类三角函数预计radians,不度的角度。许多提供三角函数的编程语言都是这样的。
弧度度测量同样的事情,但在度完全旋转从0
去360°
而弧度完整循环去从0
到2π
。
要将角度转换为弧度,请将角度乘以π/180
。在Java中,常量π
由Math.PI
提供。
例如,10度的角度等于10 * π/180
或π/18
弧度。
只是好奇心,你会如何与人物45º角线?我试着划线,划线和减号,但看起来很丑(¯-)。 – rraallvv 2017-11-15 14:50:35
首先,您需要cos
和sin
,而不是cos
和tan
。其次,大多数数学库以弧度而不是度数来执行三角函数。所以10
确实是一个非常大的差异!从度数转换为弧度,乘以(pi/180)
。
你看起来不均匀的角度的原因是,每当你加10时,你实际上是围绕着圆圈旋转1.6倍。
数学函数期望角度以弧度为单位,而不是度数。
360度= 2 * Math.PI弧度。
,而不是10,写上 “2 * Math.PI/36.0”
此外,使用罪,而不是晒黑。
Mathemagic。谢谢。 – Priam 2011-04-05 23:54:50
你不应该使用棕褐色,但罪恶。如果我没有记错,它应该是这样的: Math.cos(angle/180); -Math.sin(angle/180); 对罪的负面影响很重要。
http://en.wikipedia.org/wiki/Radian – YXD 2011-04-05 23:45:36
将sin()替换为tan(),并将角度增加0.1。 – 2011-04-05 23:45:47
也就是说,角度应该是弧度而不是度数。 360度= 2 * pi弧度。 2的因素是历史错误之一。 – YXD 2011-04-05 23:47:13