Moderator: Moderators
ww@localhost:echo $name
"\ /\ / /\ |-- |-- |= |\ |"
" \/ \/ /- \ | | |-- | \|"
Done
ww@localhost:
void DrawTree_stage (ARLevel& level, int grade, float length, float angle, int index, float x, float y, float rotation)
{
float eps = 1e-4;
int i,j;
bool found;
float new_x, new_y;
int link_type;
if (grade <= 1)
link_type = LINK_TYPE_PLATE;
else
link_type = LINK_TYPE_BAR;
// left branch
new_x = x + cos(rotation + angle) * length;
new_y = y + sin(rotation + angle) * length;
found = false;
j = 0;
while ((j < level.points_num) && !found)
{
if ((fabs(level.points[j].x - new_x) < eps) && (fabs(level.points[j].y - new_y) < eps))
found = true;
else
j++;
}
if (found)
i = j;
else
{
level.addPoint (new_x, new_y, POINT_TYPE_ANCHOR);
i = level.points_num-1;
}
level.addLink (&level.points[index], &level.points[i], link_type);
if (grade > 1)
DrawTree_stage (level, grade-1, length/2, angle, i, new_x, new_y, rotation + angle);
// middle branch
new_x = x + cos(rotation) * length;
new_y = y + sin(rotation) * length;
found = false;
j = 0;
while ((j < level.points_num) && !found)
{
if ((fabs(level.points[j].x - new_x) < eps) && (fabs(level.points[j].y - new_y) < eps))
found = true;
else
j++;
}
if (found)
i = j;
else
{
level.addPoint (new_x, new_y, POINT_TYPE_ANCHOR);
i = level.points_num-1;
}
level.addLink (&level.points[index], &level.points[i], link_type);
if (grade > 1)
DrawTree_stage (level, grade-1, length/2, angle, i, new_x, new_y, rotation);
// right branch
new_x = x + cos(rotation - angle) * length;
new_y = y + sin(rotation - angle) * length;
found = false;
j = 0;
while ((j < level.points_num) && !found)
{
if ((fabs(level.points[j].x - new_x) < eps) && (fabs(level.points[j].y - new_y) < eps))
found = true;
else
j++;
}
if (found)
i = j;
else
{
level.addPoint (new_x, new_y, POINT_TYPE_ANCHOR);
i = level.points_num-1;
}
level.addLink (&level.points[index], &level.points[i], link_type);
if (grade > 1)
DrawTree_stage (level, grade-1, length/2, angle, i, new_x, new_y, rotation - angle);
}
void DrawTree (int grade, float length, float angle)
{
ARLevel level;
level.Init ();
level.loadLevel ("blank.lvl");
// blank is empty level
int link_type;
float x,y;
link_type = LINK_TYPE_BAR;
x = 0;
y = 0;
level.addPoint (x, y, POINT_TYPE_ANCHOR);
level.addPoint (x, y+length, POINT_TYPE_ANCHOR);
level.addLink (&level.points[0], &level.points[1], link_type);
DrawTree_stage (level, grade, length/2, angle, 1, x,y+length, D3DX_PI/2);
level.saveLevel ("Tree.lvl");
}
ww@localhost:echo $name
"\ /\ / /\ |-- |-- |= |\ |"
" \/ \/ /- \ | | |-- | \|"
Done
ww@localhost:
ww@localhost:echo $name
"\ /\ / /\ |-- |-- |= |\ |"
" \/ \/ /- \ | | |-- | \|"
Done
ww@localhost:
DrRoy wrote:ЗЫ. Коля, ты ЖЛОБ!!!
Почему так мало денег дал???????
Users browsing this forum: No registered users and 25 guests