![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
определение расстояния до объекта
Andy Eremin © (2003-02-27 07:35:00)
Уважаемы Мастера!
Как определять расстояние между множеством порожденных объектов, нахождение ближайшего?
Маленькая тонкость: я только-только начал изучать объеное программирование, поэтому пожалуйста объясните как для "чайника".
Mirovodin (2003-02-27 16:57:00) [1]Простой пример :
TGameEngine = Class (TObject)
...
private
ObjectList: TList;
...
public
( const BaseObject:TMyObj; var OutObj: TMyObj)Простой пример :
TGameEngine = Class (TObject)
...
private
ObjectList: TList;
...
public
function CalcMinDist(const BaseObject:TMyObj; var OutObj: TMyObj): integer;
end;
В классе TGameEngine содержится список указателей на различные объекты.
pasha676 (2003-02-27 16:01:00) [2]
Как у разных? Один класс - TMyObj. В данном примере в цикле перебираються все объекты этого класса, ну и осуществляется доступ к переменным Х и У.
Весь смысл в том, что у тебя где-то должен храниться список этих объектов. Даже не важно как он организован (TList или просто связанные списки или еще как-нибудь), главное чтоб он был. Ты пробегаешь по списку и производишь манипуляции. Если тебя смущает TList - пользуйся связанными списками - это классика, описана и в простом паскале. Но смысл тот же. TList - легче в реализации.
Andy Eremin (2003-02-27 15:21:00) [3]
2 Mirovodin
Теперь понятно.
Однако здесь Вы приводите пример с поределением x и y разных классов. А если класс один и мне нужно определить x и y всех объектов класса?
Mirovodin (2003-02-27 14:13:00) [4]
Несколько не понял вопроса, объясню с самого начала.
Любой объект описывается допустим записью (или классом) :
PMyObj=^TMyObj;
TMyObj=Record
X : integer;
Y : integer;
...
end;
Записи помещаются в список, TList. Проход по всему списку олбъектов будет выглядеть примерно так :
tmpMyObj : PMyObj
For I := 0 To MyList.Count - 1 Do
begin
tmpMyObj := MyList.Items[i];
Доступ к элементу
tmpMyObj^.X
tmpMyObj^.Y
...
end;
Andy Eremin (2003-02-27 13:23:00) [5]
2 Mirovodin
Вопрос не в том, как вычислить (хотя и за это спасибо), а как определить какой объект является с координатой x2 и y2.
Если проще выразиться: я не знаю, как произвести процесс попеременного сравнения координат множества объектов.
Раньше бы я сделал так
(d[i])^2:=(x[i]-x[j])^2+(y[i]-y[j])^2
А сейчас массива нет.
Я до сих пор не понял, почему переменные x и y нигде не определяются, но тем не менее участвуют при создании и движении объектов. Видимо, это какие-то внутренние переменные. Тогда вопрос: если есть переменные x и y, может, еще какие есть?
pasha676 (2003-02-27 12:15:00) [6]
> я только-только начал изучать объеное программирование,
> поэтому пожалуйста объясните как для "чайника".
математика она одинаковая и в "объеном" (объемном или объектном ????) программировании и у "чайников". Даже не читая учебник ты мог бы впомнить хотя бы теорему Пифагора. Квадрат гипотенузы равен сумме квадратов катетов. Из нее легко выводиться формула написанная Mirovodin.
Mirovodin (2003-02-27 11:03:00) [7]
Раздел "АНАЛИТИЧЕСКАЯ ГЕОМЕТРИЯ". Класс эдак 6-7...
d^2= (x2-x1)^2 + (y2-y1)^2
d - дистанция
x1,y1 - координаты объекта 1
x2, y2 - координаты объекта 2
Самый ближний объект у которого min d