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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2010, 23:29   #11
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Код:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  n:=n+1; // это не счётчик ли?
  setLength(mas_point,n);
  mas_Point[n-1].x:=x;
  mas_Point[n-1].y:=y;
  Form1.Canvas.Pixels[x,y]:=RGB(0,0,0);
end;
Ты говоришь, что они заполнены. Они заполняются, и это верно!
щёлкни по форме 4 раза. Чем ближе ты расположишь точки друг от друга, тем быстрее заполнятся стороны треугольников.
а теперь посмотри через трассировку состояния Т1 и Т2 когда дело дойдёт до процедуры Proverka.
там слева внизу при трассировке можно выбирать процедуры в checkBox , вот выбери процедуру "проверка" и посмотри на их состояние.
Тогда увидишь, что они не определены.
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 22.05.2010 в 23:40.
Rin вне форума Ответить с цитированием
Старый 23.05.2010, 00:19   #12
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Чел, Спасибо большое, что отозвался. Просто trouble не в заполнении треугольников и выделении памяти.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 23.05.2010, 08:48   #13
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Ты говоришь, что они заполнены.
Я такого не говорил.

Цитата:
щёлкни по форме 4 раза.
Щелкнул. Поучил треугольник и "Invalid floating operation"

Цитата:
а теперь посмотри через трассировку состояния Т1 и Т2 когда дело дойдёт до процедуры Proverka.
А я, что по вашем до этого делал? В процедуре проверка Т1 и Т2 имеют нормальные значения.

Код:
 n:=n+1; // это не счётчик ли?
Если бы вы читали мои сообщения, то увидели, что об этом счетчике я писал.
p51x вне форума Ответить с цитированием
Старый 23.05.2010, 14:10   #14
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
da:boolean;
peremena,ii:integer;
begin
while da do// сортирую точки по OX
begin
  da:=false;
  for ii := 0 to n-2 do
  if mas_point[ii].X>mas_point[ii+1].x then
  begin
    swapP(mas_point[ii],mas_point[ii+1]);
    da:=true;
  end;
end;// закончил сортировку
  nomer_trey:=1;// это счётчик треугольников
  i:=0;// это счётчик точек 
  setLength(mas_Treyg,nomer_trey);// выделяем память на 1 элемент
// запоминаем точки этого треугольника
  mas_treyg[nomer_trey-1].PA:=Mas_Point[i];
  mas_treyg[nomer_trey-1].PB:=Mas_Point[i+1];
  mas_treyg[nomer_trey-1].PC:=Mas_Point[i+2];
// заполняем стороны треугольника координатами
  Zapolnenie_Trey(mas_Treyg[Nomer_trey-1]);
if n>3 then // если мы поставили на форме больше , чем 3 точки, то
  repeat
    inc(nomer_trey);// увеличить на единицу
    inc(i);// передвигаемся на одну точку вперёд
    setLength(mas_treyg,nomer_trey);// выделяем память под массив 
    //запоминаем точки этого треугольника
    mas_treyg[nomer_trey-1].PA:=mas_Point[i];
    mas_treyg[nomer_trey-1].PB:=mas_Point[i+1];
    mas_treyg[nomer_trey-1].PC:=mas_Point[i+2];
// заполняем стороны треугольника координатами
    Zapolnenie_Trey(mas_Treyg[Nomer_trey-1]);
// а здесь при передаче благополучно заполненных параметров прога не хочет работать с этими элементами массива
    proverka(mas_Treyg[Nomer_trey-2],mas_Treyg[Nomer_trey-1]);
// строки, которые ниже, уже не важны, т.к. proverka не выполняется
    if peresechenie then
    begin
      mas_Treyg[Nomer_trey-1].PA:=Mas_Point[i-1];
      mas_treyg[nomer_trey-1].PB:=mas_Point[i+1];
      mas_treyg[nomer_trey-1].PC:=mas_Point[i+2];
      Zapolnenie_Trey(mas_Treyg[Nomer_trey-1]);
      peresechenie:=false;
    end;
  until i+2=n-1;
  // заполнение нашего многоугольника
  for i:= 0 to Nomer_trey-1 do
  trey_full(mas_treyg[i].PA,mas_treyg[i].PB,mas_treyg[i].PC);
  i:=0;
  nomer_trey:=0;
  n:=0;
end;
Скажи , где я не выделяю память? На счёт , того , что нет проверки на нажатие кнопки мыши,то это сейчас не важно. Мне главное , чтобы алгоритм запахал. А потом уж защиту от дурака делать буду.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 23.05.2010, 17:29   #15
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
// запоминаем точки этого треугольника
mas_treyg[nomer_trey-1].PA:=Mas_Point[i];
Щелкни на кнопку и убедись, что упадет здесь.
p51x вне форума Ответить с цитированием
Старый 23.05.2010, 23:28   #16
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

прога работает, но через раз. Если ,в общем, в левом нижнем углу поставить 4 точки , то он выдаст фигуру. Но правда не всегда ту , что надо.
Изображения
Тип файла: png Безымянный.png (16.2 Кб, 29 просмотров)
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 23.05.2010, 23:56   #17
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

но самое главное... алгоритм не работает!
если в full_draw_line в начале вписать это:
Код:
procedure TForm1.full_draw_Line(var x1, y1, x2, y2: integer);
var
 dx,dy,x,y:integer;
procedure swap(var xx1,xx2,yy1,yy2:integer);
var z:integer;
begin
  z:=xx1;  xx1:=xx2;  xx2:=z;
  z:=yy1;  yy1:=yy2;  yy2:=z;
end;
begin
if y1=y2 then
begin
  if x1>x2 then swap(x1,x2,y1,y2);
  for x := x1 to x2 do
  Form1.Canvas.Pixels[x,y]:=RGB(0,0,0);
  exit;
end;
.........................................
end;
то ошибок вылетать не будет.
Но вот с процедурой "Проверка" беда)))

Главное, что с ошибкой "floating point"и "Invalid floating operation" разобрался. Теперь можно дальше химичить =). Огромное спасибо, p51x и mutabor за то, что выделили моей проблеме ВАШЕ время. Если кому-то надо , то выложу, что получилось.

Так к чему я веду? А, вопрос закрыт.=)
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 24.05.2010 в 00:56.
Rin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
1.Найти в матрице первую строку, все элементы которой отрицательны 2.отсортировать элементы массива по в w0lf16 Помощь студентам 2 22.11.2009 15:47
Элементы массива Ximer Паскаль, Turbo Pascal, PascalABC.NET 5 26.04.2009 00:53
Элементы массива в листбокс KiDoki Общие вопросы Delphi 4 07.10.2008 18:05
Повторяющиеся элементы массива Stanislav Общие вопросы Delphi 10 23.05.2008 12:31
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44