基本三角学(画一条线)

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;