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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2015, 13:55   #1
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию "Пройти" прямую в пространстве по приращениям

Суть такая - даны координаты( х,у,z) точки начала и точки конца, нужно с заданной степенью дескретезации пройти как бы по шагам(приращениям в каждой координате) эту прямую.
Помогите пожалуйста с алгоритмом...

Последний раз редактировалось ayPinki; 21.03.2015 в 14:03.
ayPinki вне форума Ответить с цитированием
Старый 21.03.2015, 16:32   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

это же тоже самое что алгоритм рисования прямой
Sibedir вне форума Ответить с цитированием
Старый 22.03.2015, 14:55   #3
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
это же тоже самое что алгоритм рисования прямой
ну так подскажите его пожалуйста
ayPinki вне форума Ответить с цитированием
Старый 22.03.2015, 15:21   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

http://algolist.manual.ru/graphics/painting/line.php
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.03.2015, 14:12   #5
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
    x1,x2,y1,y2,dx,dy,s1,s2,x,y,o,i,v,obmen   : integer;
begin
  x1:=strtoint(edit1.Text);
  y1:=strtoint(edit2.Text);
  x2:=strtoint(edit3.Text);
  y2:=strtoint(edit4.Text);
  x:=x1;
  y:=y1;
  dx:=(abs(x2-x1));
  dy:=(abs(y2-y1));
  if (x2-x1)<=0 then s1:=-1 else s1:=1;
  if (y2-y1)<=0 then s2:=-1 else s2:=1;
  if dy>dx then
  begin
    v:=dx;
    dx:=dy;
    dy:=v;
    obmen:=1;
  end
  else obmen:=0;
  o:=2*dy-dx;
  for i := 1 to dx do
  begin
    form1.Canvas.Pixels[x,y]:=clBlack;
    while o>=0 do //тут что то с begin end напутано?
    begin
      if obmen=1 then
      x:=x+s1
      else
        y:=y+s2;
      o:=o-2*dx;
    end;
    if obmen=1 then y:=y+s2
    else x:=x+x1;
    o:=o+2*dy;
  end;
там по моему ошибочка есть, с begin end, помогите понять как правильно стоять должно?
и это брезенхейм для 2-х координат, помогите преобразовать для трех...
хотя строит корректно, всё равно не пойму логики с этим while не на "весь" код

Последний раз редактировалось ayPinki; 23.03.2015 в 15:17.
ayPinki вне форума Ответить с цитированием
Старый 23.03.2015, 15:56   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
и это брезенхейм для 2-х координат, помогите преобразовать для трех...
Цитата:
Если Е < 0, то точное Y-значение округляется до последнего меньшего целочисленного значения Y, т.е. Y-координата не меняется по сравнению с предыдущей точкой. В противном случае Y увеличивается на 1
Наверное тоже надо сделать и с третьей координатой (Z).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.03.2015, 16:23   #7
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Наверное тоже надо сделать и с третьей координатой (Z).
а что это за Е?
я просто не понимаю что делать например с o:=2*dy-dx; тогда...
ayPinki вне форума Ответить с цитированием
Старый 23.03.2015, 17:01   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

смотри 11.jpg
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.03.2015, 18:45   #9
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
я пытался... подправите
Код:
var
    z1,z2,x1,x2,y1,y2,dx,dy,dz,s1,s2,s3,x,y,z,o,oz,i,v,obmen   : integer;
begin
  memo1.Clear;
  x1:=strtoint(edit1.Text);
  y1:=strtoint(edit2.Text);
  x2:=strtoint(edit3.Text);
  y2:=strtoint(edit4.Text);
  z1:=strtoint(edit5.Text);
  z2:=strtoint(edit6.Text);
  x:=x1;
  y:=y1;
  z:=z1;
  dx:=(abs(x2-x1));     
  dy:=(abs(y2-y1));
  dz:=(abs(z2-z1));
  if (x2-x1)<=0 then s1:=-1 else s1:=1;   
  if (y2-y1)<=0 then s2:=-1 else s2:=1;
  if (z2-z1)<=0 then s3:=-1 else s3:=1;
  if dy>dx then        
  begin
    v:=dx;
    dx:=dy;
    dy:=v;
    obmen:=1;    
  end
  else obmen:=0;
  o:=2*dy-dx;
  oz:=2*dy-dz;
  for i := 1 to dx do
  begin
    memo1.lines.add(inttostr(x)+' '+inttostr(y)+' '+inttostr(z));
    form1.Canvas.Pixels[x+100,y+100]:=clBlack;
    while o>=0 do
      begin
        if obmen=1 then
          x:=x+s1
          else
          y:=y+s2;
        o:=o-2*dx;

      end;
    if obmen=1 then
      y:=y+s2
      else
      x:=x+s1;
    o:=o+2*dy;

   while oz>=0 do
   begin
         z:=z+s3;
         oz:=oz-2*dz;
   end;

  end;
 // form1.refresh;
 // self.Repaint;
end;


end.
ayPinki вне форума Ответить с цитированием
Старый 30.03.2015, 19:03   #10
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию

удалите пожалуйста тему.

Последний раз редактировалось ayPinki; 30.03.2015 в 20:10.
ayPinki вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Проект "Как пройти в библитеку?" LosDesperado C# (си шарп) 4 16.05.2011 16:39
Пройти тест на тему "Моделирование систем" alexslash Фриланс 0 11.12.2010 00:10
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04