forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Оптимальный способ проверить находится ли объект между точками знаете? (http://forum.boolean.name/showthread.php?t=15868)

CRASHER 17.11.2011 22:15

Оптимальный способ проверить находится ли объект между точками знаете?
 
Вопрос в оглавлении. Я вот пользуюсь xLinePick. Сейчас надо делать до 100 таких проверок за проход.Это медленно. Есть альтернатива этой команде?

Reizel 18.11.2011 00:46

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
гугли "расстояние от точки до прямой". Если не понимаешь, зачем это - лучше продолжай делай пиками :D

dsd 18.11.2011 02:41

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
Векторы?

1.Вектор соединяющий точки. Вектор от точки до объекта. Считаешь их длины.

Косинус угла между векторами (x1*x2+y1*y2+z1*z2)/(|длина первого|*|длина второго|). Чем ближе значение к единице тем ближе позиция объекта к линии соединяющей точки. При единице лежит на линии.


2. Вектор от первой точки к второй назовем а. От первой точки к объекту б.

если координата икс у обоих одного знака и у б она меньше по модулю, то если отношение координат этих векторов равно, то объект лежит между точек.

Одинаковый знак если произведение координат больше равно нуля.

if ((a.x*b.x>=0) && (b.x/a.x==b.y/a.y && b.x/a.x=b.z/a.z)) { ... }

CRASHER 18.11.2011 16:24

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
Reizel, как это можно использовать при нахождении объекта?

CRASHER 18.11.2011 16:27

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
dsd, а как провести вектор от точки до объекта, который как раз между точками? Получется надо строить кучу векторов от точки до каждого объекта сцены, так?

dsd 18.11.2011 16:49

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
Цитата:

Сообщение от CRASHER (Сообщение 210229)
dsd, а как провести вектор от точки до объекта, который как раз между точками? Получется надо строить кучу векторов от точки до каждого объекта сцены, так?

В своей голове ты его проводишь. В уме. :facepalm:

pozitiffcat 18.11.2011 16:51

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
Может xLinePick(xyz откуда, xyz до куда) вернет entity

FireOwl 18.11.2011 16:55

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

pozitiffcat 18.11.2011 16:59

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
стремно нету маски например по entitytype
UPD не ну пусть делает по такому алгоритму
пустить луч, если он что то нашел, если это искомый объект - то да он находится между, если это другой объект, то пустить луч еще раз только уже от этого другого, и так до тех пор пока искомый объект не найдется, если в итоге он вернул ноль то ниче не нашел

CRASHER 18.11.2011 17:30

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
Не понимаю о чем зашел разговор. Я LinePick'ом и пользуюсь, мне просто интерестно есть ли что то быстрее этого? Мож в ксорсе что то по быстрее есть, или библиотеки какие новые появились.
dsd, ты наверно в голове и код игры пишешь и публикуешь в голове и ганарары тоже в голове получаешь?)) Не ну серьёзно, не пойму ударов по твоему лицу ладоней.

pozitiffcat 18.11.2011 17:39

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
а с чего ты взял что медленно? Быстрее RayCastинга вроде нет ниче.. да и небывает наверное.

Платон Александрович 18.11.2011 18:01

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
CRASHER
Подозреваю что xLinePick, как впрочем и весь рейтрейсинг в хорсе, перебирает все ентити в сцене, поэтому не так быстро как тебе хочется. Используй физический движок (кажется там встроен Bullet), либо почитай про space partitioning (Sweep & Prune, BVH, Octree, BSP, KD-Tree и подобное) и сделай сам :) Выбор метода зависит от сцены, динамическая она или статическая, и какие в ней объекты.

pozitiffcat 18.11.2011 19:49

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
физика там есть тока вот не риализовано там на основе физики вся эта лабуда. Как вариант пилить самому физ движок под ксорс

CRASHER 18.11.2011 19:53

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
pozitiffcat, а во вспомнил RayCast точно, вроде оно.

.Squid 18.11.2011 20:51

Ответ: Оптимальный способ проверить находится ли объект между точками знаете?
 
Цитата:

Сообщение от pozitiffcat (Сообщение 210246)
физика там есть тока вот не риализовано там на основе физики вся эта лабуда. Как вариант пилить самому физ движок под ксорс

Ваша уверенность, сударь, вызывает у меня недоумение и утомление.
Физика в Ксорсе основана на Буллите. А тот использует и BVH, и sweep and prune, и что-то еще, инфа 100%.
Последнее предложение вообще на грани фантастики.


Часовой пояс GMT +4, время: 21:20.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot