www.boolean.name

www.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Проверка нахождения объекта внутри другого (http://forum.boolean.name/showthread.php?t=18963)

Arton 21.02.2014 09:02

Проверка нахождения объекта внутри другого
 
Нужно проверить находится ли объект внутри ограничительного бокса. Не как не могу понять как это сделать.
Проверять по радиусу от центра бокса не получится, ведь это не сфера. На булке ничего подходящего не нашёл. Использовать типо MeshWidth, MeshHeight, MeshDepth? Скорость выполнения неважна, т. к. не для реал тайма.

Прошу помочь с алгоритмом, спасибо.

Nex 21.02.2014 09:10

Ответ: Проверка нахождения объекта внутри другого
 
Вложений: 1
Есть такой код от H@NON вроде. Типа система тригеров.

Mr_F_ 21.02.2014 12:25

Ответ: Проверка нахождения объекта внутри другого
 
ну чего тут думать то
Если Х искомой точки больше min X бокса и меньше max X бокса, значит точка в боксе по оси Х. Такие же проверки по YZ. Это для AABB.
Если бокс ротированный (OBB), то надо сначала умножить точку на инверсию его ротации (матрицу, кватернион), чтобы привести её в пространство бокса а дальше проверять так же как с AABB.
Если надо проверить нахождение в боксе не точки а другого бокса, то проверяешь все точки этого другого бокса. Или там даже все точки меша, если совсем точно надо.

mr.DIMAS 21.02.2014 15:29

Ответ: Проверка нахождения объекта внутри другого
 
Для AABB
Код:

Function IsPointInsideAABB%( point, box )
    ; point - объект
    ; box - проверяемый объем
    Local px#=EntityX#( point, true )
    Local  py#=EntityY#( point, true )
    Local  pz#=EntityZ#( point, true )

    Local  bx#=EntityX#( box, true )
    Local  by#=EntityY#( box, true )
    Local  bz#=EntityZ#( box, true )

    Local  hw#=MeshWidth#(box)
    Local  hh#=MeshHeight#(box)
    Local  hd#=MeshDepth#(box)

    If px > ( bx + hw ) or px < x Then
      Return 0
    End If
    If py > ( by + hh ) or py < y Then
      Return 0
    End If
    If pz > ( bz + hd ) or pz < z Then
      Return 0
    End If

    Return 1

End Function

Синтаксис блица не помню, но вроде правильно

Wegox 21.02.2014 21:23

Ответ: Проверка нахождения объекта внутри другого
 
Цитата:

Сообщение от Arton (Сообщение 274955)
Нужно проверить находится ли объект внутри ограничительного бокса. Не как не могу понять как это сделать.
Проверять по радиусу от центра бокса не получится, ведь это не сфера. На булке ничего подходящего не нашёл. Использовать типо MeshWidth, MeshHeight, MeshDepth? Скорость выполнения неважна, т. к. не для реал тайма.

Прошу помочь с алгоритмом, спасибо.

Было - было, вот там burovalex'а слушай.

Arton 21.02.2014 22:44

Ответ: Проверка нахождения объекта внутри другого
 
Всем спасибо, прошу прощения что создал эту тему. Плохая идея не спать по ночам, голова не варит.

У Wegox оказывается готовый код идеально подходящий под решение моей задачи. Был вчера в той теме, но слона и не приметил.

Wegox, огромное спасибо :super:


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

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