Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2012, 16:18   #1
microlab
Пользователь
 
Регистрация: 06.11.2008
Сообщений: 51
По умолчанию графика. елки и тополя. Условие местоположения

uses graphABC;
var x,y,r,h,i,n,top,elk:integer;
procedure topol(x,y,r,h:integer);
begin
brush.Color:=clGreen;
fillcircle(x,y,r);
brush.Color:=clbrown;
Line(x,y,x,y+h);
end;
procedure elka(x,y:integer);
begin
pen.color:=clbrown;
brush.color:=clbrown;
fillRectangle(x,y,x+15,y+25);
pen.color:=clgreen;
brush.color:=clgreen;
var n:array of point:=(new point (x-15,y),new point (x+10,y-60),new point (x+30,y));
begin
FillPolygon(n);
end;
end;
begin
writeln('vvod kol-vo topolei');
readln(top);
writeln('vvod kol-vo elka');
readln(elk);
window.Clear;
Line(350,0,150,800);
Line(450,0,650,800);
window.Title:=('лес');
window.SetSize(800,800);
window.CenterOnScreen;

for i:=1 to top do
begin
x:=random(0,350);
y:=random(0,800);
r:=random(10,20);
h:=r+25;
topol(x,y,r,h);
sleep(30);
end;
for i:=1 to elk do
begin
x:=random(window.Width-30);
y:=random(window.Height-30);
elka(x,y);
sleep(40);
end;

end.


В данном коде тополя ограничены справа(350 пикселей). Не могу придумать условие чтобы они не выходили за линию 1(левая) п.с. нижний край всего 150 пикселей. И елки были с права от второй линии верхняя 450+ и 650+
microlab вне форума Ответить с цитированием
Старый 09.04.2012, 17:19   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Достаточно задать уравнение прямых (формула дается в институте, но очень проста и полезна):
Код:
uses
  graphABC;

var
  x, y, r, h, i, n, top, elk: integer;

procedure topol(x, y, r, h: integer);
begin
  brush.Color := clGreen;
  fillcircle(x, y, r);
  brush.Color := clbrown;
  Line(x, y, x, y + h);
end;

procedure elka(x, y: integer);
begin
  pen.color := clbrown;
  brush.color := clbrown;
  fillRectangle(x, y, x + 15, y + 25);
  pen.color := clgreen;
  brush.color := clgreen;
  var n: array of point := (new point(x - 15, y), new point(x + 10, y - 60), new point(x + 30, y));
  begin
    FillPolygon(n);
  end;
end;

begin
  writeln('vvod kol-vo topolei');
  readln(top);
  writeln('vvod kol-vo elka');
  readln(elk);
  window.Clear;
  Line(350, 0, 150, 800);
  Line(450, 0, 650, 800);
  window.Title := ('лес');
  window.SetSize(800, 800);
  window.CenterOnScreen;
  
  for i := 1 to top do
  begin
    y := random(0, 800);
    r := random(10, 20);
    h := r + 25;
    repeat
      x := random(0, 350);
    until y + h < 1400 - 4 * x;
    r := random(10, 20);
    h := r + 25;
    topol(x, y, r, h);
    //sleep(30);
  end;
  for i := 1 to elk do
  begin
    y := random(window.Height - 30); 
    repeat
      x := random(window.Width - 30); 
    until y + 25 < 4 * x - 1800;
    elka(x, y);
    //sleep(40);
  end; 
  
end.
Уравнение прямой по двум точкам , где x, y -переменные, (x0,y0), (x1,y1) - точки, через которые проходит прямая. Прямые линии обозначают определитель, это в данном случае значит, что (x-x0)*(y1-y0)-(y-y0)*(x1-x0)=0.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 10.04.2012 в 03:35.
BDA вне форума Ответить с цитированием
Старый 15.04.2012, 17:59   #3
microlab
Пользователь
 
Регистрация: 06.11.2008
Сообщений: 51
Хорошо Интересный вариант

Спасибо за подсказанную идею формула понятна, но не догадался так её применить
microlab вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализовать программу сбора елки из треугольников. Используя объектные структуры, создать 6 треугольников разного размера dyozik Общие вопросы Delphi 4 05.12.2011 11:52
Строка местоположения на сайте ronin12 HTML и CSS 7 07.12.2010 00:23
координаты местоположения LENA_M Общие вопросы C/C++ 0 26.10.2010 22:37
Определение местоположения курсора hackPNZ Microsoft Office Word 4 11.11.2009 14:02
Определение местоположения по IP Zer0 Работа с сетью в Delphi 8 27.12.2007 10:56