基本三角学(画一条线)
Basic trigonometry (drawing a line)
我正在尝试绘制递归树,但我已经卡在了开头。一段时间以来,我一直在努力解决这个问题,但我似乎做对了。
我正在使用 StdDraw 库。这是我想要做的:
我已经画好了树干(黑线)。但是我也需要画红线。
在主函数中,我将 canvas 大小设置为 500x500px,并将 x 和 y 限制设置为 0-500。
StdDraw.setCanvasSize(500, 500);
StdDraw.setScale(0, 500);
我收到的树参数是树长(d)和角度(正弦)。还有一些其他的(递归需要,但与这个简单的问题无关)
我使用以下代码绘制了树干:
StdDraw.line(250, 150, 250, 150+d);
如果您不熟悉 StdDraw,它是:StdDraw.line(x0, y0, x1, y1)
现在对于红线,我一直在努力学习一些基本的三角函数,但我不知道我哪里错了。这是代码:
//The length of the red line is 3/4 the length of the trunk(given in instructions)
double hypotenuse = (3/4)*d;
//We get the opposite by multiplying the sine * hypotenuse, correct?
double opposite = Math.sin(alpha) * hypotenuse;
//Pythagorean Theorem to get the adjacent
double adjacent = Math.sqrt(Math.pow(hypotenuse, 2)-Math.pow(opposite, 2));
//We draw the line from the last x position minus adjacent to move to the left
//and from last y position upwards by 150+d(previous position)+opposite
StdDraw.line(250,150+d,250-adjacent,150+d+opposite);
我在 main 中创建了一个新的 Tree 对象 d=110, alpha=40
来测试它。
如果我移除后备箱并且只尝试画红线(使用StdDraw.line(250,150+d,250-adjacent,150+d+opposite)
)。我只得到一个黑点,像这样:
你所有的边都设置为零,因为这里:
double hypotenuse = (3/4)*d;
(3/4)
等于 0
。更改为:
double hypotenuse = (3/4.0)*d;
或:
double hypotenuse = 0.75 * d;
我正在尝试绘制递归树,但我已经卡在了开头。一段时间以来,我一直在努力解决这个问题,但我似乎做对了。
我正在使用 StdDraw 库。这是我想要做的:
我已经画好了树干(黑线)。但是我也需要画红线。
在主函数中,我将 canvas 大小设置为 500x500px,并将 x 和 y 限制设置为 0-500。
StdDraw.setCanvasSize(500, 500);
StdDraw.setScale(0, 500);
我收到的树参数是树长(d)和角度(正弦)。还有一些其他的(递归需要,但与这个简单的问题无关)
我使用以下代码绘制了树干:
StdDraw.line(250, 150, 250, 150+d);
如果您不熟悉 StdDraw,它是:StdDraw.line(x0, y0, x1, y1)
现在对于红线,我一直在努力学习一些基本的三角函数,但我不知道我哪里错了。这是代码:
//The length of the red line is 3/4 the length of the trunk(given in instructions)
double hypotenuse = (3/4)*d;
//We get the opposite by multiplying the sine * hypotenuse, correct?
double opposite = Math.sin(alpha) * hypotenuse;
//Pythagorean Theorem to get the adjacent
double adjacent = Math.sqrt(Math.pow(hypotenuse, 2)-Math.pow(opposite, 2));
//We draw the line from the last x position minus adjacent to move to the left
//and from last y position upwards by 150+d(previous position)+opposite
StdDraw.line(250,150+d,250-adjacent,150+d+opposite);
我在 main 中创建了一个新的 Tree 对象 d=110, alpha=40
来测试它。
如果我移除后备箱并且只尝试画红线(使用StdDraw.line(250,150+d,250-adjacent,150+d+opposite)
)。我只得到一个黑点,像这样:
你所有的边都设置为零,因为这里:
double hypotenuse = (3/4)*d;
(3/4)
等于 0
。更改为:
double hypotenuse = (3/4.0)*d;
或:
double hypotenuse = 0.75 * d;