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
什么是正确的数学?
你的问题有两个不同的问题,我将介绍每个问题.
这是您的情况的ASCII图片:
B
+
/|
/ |
/ |
/ |
len / | y
/ |
/ |
/ |
/ __|
/ ? | |
+----------+
A x C
这是一个直角三角形.它有三个方面:
len.斜边是你想要画的东西.?并且具有长度y.?并且具有长度x.鉴于上述说明,以下等式是正确的:
cos(?) = x/len
sin(?) = y/len
Run Code Online (Sandbox Code Playgroud)
这些方程是另一种说法:
当求解方程x和y,你会得到:
x = len * cos(?)
y = len * sin(?)
Run Code Online (Sandbox Code Playgroud)
所以你想要sin()而cos()不是cos()和tan().如果该点A不在原点,则需要偏移x和y加法,如下所示:
x = len * cos(?) + 50
y = len * sin(?) + 50
Run Code Online (Sandbox Code Playgroud)
随着价值观x和y,你可以找到点的坐标B上的三角形,从而能够得出你的线条.
此外,假设您使用Java编程,Math该类中的三角函数期望以弧度为单位,而不是度.许多提供三角函数的编程语言都是这样的.
弧度度测量同样的事情,但在度完全旋转,从去0到360°,而在弧度完整循环,从去0到2?.
要将角度(以度为单位)转换为弧度,请将角度乘以?/180.在Java中,常量?由Math.PI.提供.
例如,10°的角度等于10 * ?/180或等于?/18弧度.