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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2014, 11:14   #21
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
От размеров формы. И эти иксы и игрики не должны за её пределы вываливаться, иначе масштабировать придется
не смогут они задаваться будут кликом мыши по форме.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 31.12.2014, 11:27   #22
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Dvoishnik Посмотреть сообщение
не смогут они задаваться будут кликом мыши по форме.
Тогда не надо y преобразовывать. Брать как есть и ни какого S не надо. И в формуле описка была
Код:
y:=Round(y1+(x-x1)*(y2-y1)/(x2-x1));
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.01.2015, 06:18   #23
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

спасибо за формулу! как то так получилось.
Код:
 procedure dijenie(x1, //  координаты начальной точки x
   x2, //  координаты конечной точки x
   y1, //  координаты начальной точки y
   y2:integer // оординаты конечной точки y
  {yl,    координаты движения по оси y
   xl  координаты движения по оси x } );

   var
  yr,xr:integer; 
  Tim:boolean;

implementation

 procedure dijenie(x1,x2,y1,y2:integer);
  Begin
  if (x1=x2) and (y1=y2) then  //повторное точки
   begin
    tim:=False; // остановка таймера
    Exit;
   end;
  tim:=true;
  if abs(x1-x2) > abs(y1-y2)  then  //  по горизонтали или вртикали
   begin
    if x1<x2 then                  //вправо или влево
     xr:=xr+1 else
      xr:=xr-1;
    yr:=Round(y1+(xr-x1)*(y2-y1)/(x2-x1));
    if xr=x2 then tim:=False; // остановка таймера
   end
    else
     begin
      if y1<y2 then               //вверх или вниз
       yr:=yr+1 else
        yr:=yr-1;
      xr:=Round(x1+(yr-y1)*(x2-x1)/(y2-y1));
      if yr=y2 then tim:=False; // остановка таймера
     end;
  end;
буду очень рад если кто нибудь даст несколько советов по оптимизации всего этого.
Вложения
Тип файла: rar движение по прямой линии.rar (161.3 Кб, 9 просмотров)
Терпение!Дежурный экстрасенс скоро свяжется с вами!

Последний раз редактировалось Dvoishnik; 07.01.2015 в 06:26.
Dvoishnik вне форума Ответить с цитированием
Старый 08.01.2015, 04:58   #24
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

sqr(х–х0)+ sqr(у–y0)=sqr(R) -формула окружности
(х1–х0)(х–х0)+(у1–у0)(у–у0)=sqr(R) - формула касательной
(x-x1)/(x2-x1)=(y-y1)/(y2-y1) - формула прямой которую вы давали
вот есть такой вопрос допустим я проведу отрезок (310,210) (330,300) как мне узнать когда моя окружность на своем пути на эту прямую? Т.Е. допустим остановим таймер когда отрезок коснется окружности. подскажите в каком направлении дальше двигаться. а то у меня очередной математический ступор((
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как рассчитать fcs - frame check sequence _Night_Scream_ Работа с сетью в Delphi 10 04.09.2013 10:14
Как рассчитать количество люмин. ламп на 1м2 olegwolf Microsoft Office Excel 7 12.06.2011 22:48
Как рассчитать возраст sql запрос slai БД в Delphi 5 28.09.2010 11:02
Как рассчитать периметр фигуры Kuzia Microsoft Office Excel 4 24.12.2009 07:51
Как рассчитать значения в табеле? fs444 Microsoft Office Excel 2 16.11.2009 13:10