Самый быстрый способ найти расстояние

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Самый быстрый способ найти расстояние

Сообщение d3drm » 03.04.2005 (Вс) 22:02

собсно, сабж. Кто может предложить наиболее производительный способ?

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 03.04.2005 (Вс) 22:04

Между чем и чем?? :wink:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 03.04.2005 (Вс) 22:07

а, ну да, между двумя точками в пространстве :D

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 03.04.2005 (Вс) 22:28

Ежели важно быстродействие, то стоит крепко призадуматься: так ли важно знать само расстояние, а не его квадрат.
Листинги не горят!

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 03.04.2005 (Вс) 22:46

sqr( (x2-x1) ^ 2 + (y2 - y1) ^ 2 ) :D
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 03.04.2005 (Вс) 22:51

Faust, верно, корень искать дело трудное, но скорее всего нужет именно он.

_Мика_, а в 3D? sqr( (x2-x1) ^ 2 + (y2 - y1) ^ 2 + (z2 - z1) ^ 2 )? есть ли другие способы?

и быдет ли быстрее данная программа если ее написать на сях?

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 03.04.2005 (Вс) 22:54

Другого способа я не знаю. Эта обычная геометрическая формула для нахождения длины вектора по его точкам :)
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 03.04.2005 (Вс) 23:01

хмм... заметил, что умножение работает быстрее чем возведение в квадрат. Хорошо.

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 04.04.2005 (Пн) 15:15

А сложение ьыстрее умножения? может все операции заменить сложением? :) :D :lol:
На это не смотрите! Это не подпись!!!!!!

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 04.04.2005 (Пн) 15:39

__asm{
fld x2
fsub x1
fmul st
fld y2
fsub y1
fmul st
fadd
fld z2
fsub z1
fmul st
fadd
fsqrt
}
:lol: :lol: :lol:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.04.2005 (Пн) 19:25

Где-то имхо мелькал способ быстрого приближённого вычисления корня. Поищи по форуму и по Яндексу. (Впрочем, я могу и ошибаться)

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 04.04.2005 (Пн) 21:50

Можно заюзать метод последовательных итераций по Ньютону:
yi+1=(yi+x/yi)/2
Листинги не горят!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.04.2005 (Пн) 21:52

Faust, это выйдет дольше, чем заюзать Sqr :?

d3drm, важно точное значение корня или же приближённого достаточно (и насколько приближённого)?

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 04.04.2005 (Пн) 22:00

Amed Будет ли подсчет приближеннного значения быстрее? И насколько? Мне не кажется, что это сильно ускорит работу.....

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 04.04.2005 (Пн) 22:01

Ну не знаю, сходится быстрее,чме по Тейлору.
Листинги не горят!

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 04.04.2005 (Пн) 22:04

d3drm
В самом деле, асмовская библиотека должна ускорить.... Но мне не кажется, что это такой критичный фрагмент, наверняка есть еще места, которые больше требуют оптимизации.........

Будь это на С++, я бы порекомендовал сделать ее Inline......
Есть аналог этого в ВБ?

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 04.04.2005 (Пн) 23:32

Хм, если будет код вычисления приближенного значения, было бы интересно посмотреть...

Код на асме - это хорошо, тока в VB вряд ли поможет =)

Еще опять же траблы с работтой в циклах. Если уж простые операции в циклах работают медленно, то что уж говорить про сложные рассчеты?

Атстой!

Если кто-нибудь работал с С++ в большом обеме, там такая же хрень? или все-таки различимая разница есть?

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 05.04.2005 (Вт) 13:18

d3drm
Ну я же говорю, во-первых в С++ можно функцию инлайнить, а переменные объявить регистровыми.(REGISTER) Это должно немного ускорить. Да и вообще, ИМХО, производительность будетвыше(достаточно сравнить итеррации/сек выдаваемые пустым циклом на ВБ, и их же на С++. На С++ в разы выше.) Но что касается непустых циклов - это надо проверять. Но, мне кажется, результат будет таким же( в смысле, производительность сишной проги по-прежнему будет выше)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 05.04.2005 (Вт) 15:17

http://www.gamedev.ru/forum/?group=0&topic=5633

Если интересно считать ручками, то
http://comp-science.narod.ru/DL-AR/koren.html

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 06.04.2005 (Ср) 19:26

Amed писал(а):http://www.gamedev.ru/forum/?group=0&topic=5633

Вот в чём преимущества поиска над кодингом - я день угробил, оптимизируя свой FastSqrt, но он упорно не хотел становиться Fast :cry:. Пока нашел структуру Single, пока отладил в VB, пока отлаживал ASM...
Зато за это время нашел полезный флаг "Allow unrounded float operations" в опциях компиляции - его установка повышает скорость вычисления sqr где-то в 6 раз. Так что, d3drm, если ты его ещё не юзаешь, то настоятельно рекомендую.
ЗЫ. И все-таки, какая относительная ошибка тебя устроит? Хотелось бы узнать число.
Листинги не горят!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 198

    TopList