Ну ладно, попробую ещё раз. Имеются два куба с центрами симметрии, совпадающими в начале координат. Ребро обоих кубов равно 2. Стороны первого куба параллельны осям координат (соответственно, вершины первого куба фиксированы). Задаются координаты вершин второго куба. Необходимо найти объём пересечения двух этих кубов.
Я пробовал:
1) разбить второй куб на N*N*N точек, проверить каждую на принадлежность первому (благо сделать это легко). Тогда V = 8 * кол-во_точек_принадлежащих_первому_кубу / (N*N*N). [Метод Монте-Карло?]
2) численный метод, т. е. рекурсивно разбивать второй куб на меньшие кубы, если какой-то куб полностью входит в первый куб, прибавлять его объём. Метод динамической палетки, так сказать.
Проблема в том, что для получения необходимой точности (6 знаков после запятой) работает непозволительно долго. В принципе, если кому интересно, могу дать исходный код для этих методов.
Итак, интересуют любые полезные советы/линки/исходники, в том числе и англоязычные ресурсы. В общем, буду премного благодарен.
... << RSDN@Home 1.1.4 stable rev. 510>>
Здравствуйте, davenger, Вы писали:
D>Мне кажется что всё-же самый нормальный способ — это считать аналитически, а не чиссленно. Т.е. посчитать объемы, отсекаемые от повёрнутого куба плоскостями, проведеёнными параллельно координатным плоскостям, потом объемы отсекакмые парами таких плоскостей, а затем тройками. А потом вычесть (некоторые надо будеь прибавить, т.к. например кусок осекаемый 2-мя плоскостями будет вычтен 2 раза — он входит в 2 куска отсекакмых одними плоскостями) эти объёмы из объёма куба.
Да, видимо, придётся считать аналитически. В принципе несложно будет найти точки пересечения. Проблема в том, чтобы посчитать объёмы "вылезающих" фигур. Я прикинул, там несколько разных случаев:
1) второй куб повёрнут относительно первого только по одной оси. Получаются 4 фигуры с прямоугольным основанием:
W /\ V +------+
+------+ |------|
| | | |
<| |> |------|
| | | |
+------+ |------|
\/ +------+
2) второй куб повёрнут по трём осям. Получаются 8 пирамидок:
W /\ V /\
+------+ +------+
| | | |
<| /\ |> <| /\ |>
| | | |
+------+ +------+
\/ \/
Какие ещё варианты образования фигур могут быть? Какие фигуры получаются при повороте по двум осям?
... << RSDN@Home 1.1.4 stable rev. 510>>
Здравствуйте, Olegator, Вы писали:
O>Да, видимо, придётся считать аналитически. В принципе несложно будет найти точки пересечения. Проблема в том, чтобы посчитать объёмы "вылезающих" фигур.
ИМХО, чем считать объём объединения, легче посчитать объём пересечения и вычесть его из суммы объёмов кубов.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, What, Вы писали:
W>ИМХО, чем считать объём объединения, легче посчитать объём пересечения и вычесть его из суммы объёмов кубов.
Мне и нужно найти объём пересечения.
... << RSDN@Home 1.1.4 stable rev. 510>>