> Нужно вычислить объем части фигуры, отсеченной плоскостью. > Может кто-нибудь знает графические библиотеки, имеющие > такую функцию? Интересуют любые варианты, даже основанные > на MFC или OpenGL/DirectX.
А как хранится сам объект?
Это функция (гладкая?, непрерывная?) или какая-то триангуляция?..
Нужно вычислить объем части фигуры, отсеченной плоскостью. Может кто-нибудь знает графические библиотеки, имеющие такую функцию? Интересуют любые варианты, даже основанные на MFC или OpenGL/DirectX.
А как хранится объект?22.06.04 14:11 Автор: whiletrue <Роман> Статус: Elderman
> Нужно вычислить объем части фигуры, отсеченной плоскостью. > Может кто-нибудь знает графические библиотеки, имеющие > такую функцию? Интересуют любые варианты, даже основанные > на MFC или OpenGL/DirectX.
А как хранится сам объект?
Это функция (гладкая?, непрерывная?) или какая-то триангуляция?..
начальное положение обьекта задается в виде координат точек...23.06.04 07:03 Автор: makeworld Статус: Member
> А как хранится сам объект? > Это функция (гладкая?, непрерывная?) или какая-то > триангуляция?..
начальное положение обьекта задается в виде координат точек вершин
Это не графические библиотеки надо брать, а математические [upd]21.06.04 12:10 Автор: amirul <Serge> Статус: The Elderman Отредактировано 21.06.04 12:13 Количество правок: 1
> Нужно вычислить объем части фигуры, отсеченной плоскостью. Объем части фигуры вычисляется как двойной интеграл по поверхности (если надо еще и массу тела, а плотность задана неоднородной функцией, то тройной).
> Может кто-нибудь знает графические библиотеки, имеющие > такую функцию? Интересуют любые варианты, даже основанные > на MFC или OpenGL/DirectX. Поставь задачу конкретнее. Тебе для себя и есть совершенно конкретные данные или тебе нужна универсальная программа.
В общем советую смотреть в сторону математических пакетов Maple/Mathematica/Matlab (MathCAD не рекомендую, он какой то попсовый сильно). Они тебе и нарисуют и вычислят и еще чего хошь сделают.
-------------------
Да, еще. Эти пакеты умеют еще раскрашивать графики для бОльшей наглядности, а также вращать график мышей и рассматривать со всех сторон (за Mathematica-у и Matlab не ручаюсь, но Maple это действительно ОЧЕНЬ сильный пакет)
Мне нужно программно сделать. Есть трехмерная фигура,...22.06.04 06:42 Автор: makeworld Статус: Member
> Поставь задачу конкретнее. Тебе для себя и есть совершенно > конкретные данные или тебе нужна универсальная программа. > > В общем советую смотреть в сторону математических пакетов > Maple/Mathematica/Matlab (MathCAD не рекомендую, он какой > то попсовый сильно). Они тебе и нарисуют и вычислят и еще > чего хошь сделают. > ------------------- > > Да, еще. Эти пакеты умеют еще раскрашивать графики для > бОльшей наглядности, а также вращать график мышей и > рассматривать со всех сторон (за Mathematica-у и Matlab не > ручаюсь, но Maple это действительно ОЧЕНЬ сильный пакет)
Мне нужно программно сделать. Есть трехмерная фигура, которую можно вертеть в любом направлении и есть плоскость которая может двигаться по вертикали. Нужно все это отрисовывать и одновременно строить график изменения обьема отсеченной части фигуры в зависимости от положения секущей плоскости.
Сделать надо в кратчайший срок и поэтому я хочу пойти методом наименьшего сопротивления - для вывода графики юзать OpenGL или DirectX, а вот с подсчетом обьема возникают трудности..
Программа на каком языке должна быть?22.06.04 12:20 Автор: amirul <Serge> Статус: The Elderman
> Мне нужно программно сделать. Есть трехмерная фигура, Maple имеет встроенный язык программирования. И любой лист в сущности является программой на этом языке.
> Сделать надо в кратчайший срок и поэтому я хочу пойти > методом наименьшего сопротивления - для вывода графики > юзать OpenGL или DirectX, а вот с подсчетом обьема > возникают трудности.. берешь уравнения фигуры и плоскости. Параметризуешь их, в том смысле, что кроме переменных x,y,z вводишь параметры a,b,c..., которые будут меняться программой (движение плоскости будет изменением одного из параметров). Интегрируешь в символьном виде и вбиваешь получившуюся формулу V(a,b,c,...) в программу (переменных уже быть не должно).
А для вывода графики юзай что нравится
Юзай для вывода что хошь, хоть GDI ж-) Но!22.06.04 10:47 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 22.06.04 10:47 Количество правок: 1
> Мне нужно программно сделать. Есть трехмерная фигура, > которую можно вертеть в любом направлении и есть плоскость > которая может двигаться по вертикали. Нужно все это > отрисовывать и одновременно строить график изменения обьема > отсеченной части фигуры в зависимости от положения секущей > плоскости. > > Сделать надо в кратчайший срок и поэтому я хочу пойти > методом наименьшего сопротивления - для вывода графики > юзать OpenGL или DirectX, а вот с подсчетом обьема > возникают трудности.. У тебя трудности с теорией? Строится мат. модель. Она в основе. Находится формула для вычисления объёма. Для вывода на экран преобразовываешь то, что у тебя в мат. модели в то, что понимает твоя граф. библиотека. Для расчёта объёма подставляешь то, что у тебя в мат. модели в функцию, которая считает объём.
2 amirul: язык программированию любой, но я выбрал C. С...23.06.04 07:21 Автор: makeworld Статус: Member Отредактировано 23.06.04 08:10 Количество правок: 1
2 amirul: язык программированию любой, но я выбрал C. С Mapple ни разу не работал.
> У тебя трудности с теорией? Строится мат. модель. Она в > основе. Находится формула для вычисления объёма. Для вывода > на экран преобразовываешь то, что у тебя в мат. модели в > то, что понимает твоя граф. библиотека. Для расчёта объёма > подставляешь то, что у тебя в мат. модели в функцию, > которая считает объём.
С математической моделью это понятно, проблема как раз в формуле нахождения обьема. Точнее в написании функции, которая будет вычислять обьем любого обьекта. Ведь отсеченная часть может иметь другое кол-во вершин, быть выпуклой/вогнутой итд. И именно такую возможность я бы хотел получить, заюзав какую-нибудь готовую библиотеку. Вообще, если вычислять объем "самому", мне рекомендуют использовать метод триангуляции, т.е. разбиение отсеченной части фигуры на тетраедры и подсчет обьема каждого из них. Но это способ на первый взгляд слишком гиморный, хотелось бы упростить, тем более, наверняка должны же быть уже готовые резализации в инете.
Короче, никто не знает готовую библиотеку, в которой есть функции для вычисления обьема любой фигуры? Или ни у кого нет примера использования метода триангуляции?
Пару постов назад я спросил объект уже задан или его можно...23.06.04 12:09 Автор: amirul <Serge> Статус: The Elderman
> формуле нахождения обьема. Точнее в написании функции, > которая будет вычислять обьем любого обьекта. Ведь > отсеченная часть может иметь другое кол-во вершин, быть Пару постов назад я спросил объект уже задан или его можно будет задавать динамически. При динамическом задании единственным выходом будет численное приближение, потому как символьное интегрирование - не такая уж тривиальная задача вообще и возможно на для всех возможных функций.
> Вообще, если вычислять объем "самому", мне рекомендуют > использовать метод триангуляции, т.е. разбиение отсеченной > части фигуры на тетраедры и подсчет обьема каждого из них. Не обязательно тетраэдры - это самый простой метод. Возьми книжку по численным методам. Раздел численное интегрирование. Разбиение на тетраэдры - это аналог метода эйлера для плоскости (учитывается только первая производная). Чем больше производных будет учитываться, тем больше будет точность интегрирования.
> Но это способ на первый взгляд слишком гиморный, хотелось > бы упростить, тем более, наверняка должны же быть уже > готовые резализации в инете. Гы. Просто ты не видел гиморных методов :-)
> Короче, никто не знает готовую библиотеку, в которой есть > функции для вычисления обьема любой фигуры? Или ни у кого > нет примера использования метода триангуляции? Любая книжка по численным методам
объект уже задан, т.е. есть координаты вершин24.06.04 07:56 Автор: makeworld Статус: Member Отредактировано 24.06.04 08:00 Количество правок: 1
> Пару постов назад я спросил объект уже задан или его можно > будет задавать динамически. При динамическом задании > единственным выходом будет численное приближение, потому > как символьное интегрирование - не такая уж тривиальная > задача вообще и возможно на для всех возможных функций. объект уже задан, т.е. есть координаты вершин
> > Вообще, если вычислять объем "самому", мне рекомендуют > > использовать метод триангуляции, т.е. разбиение > отсеченной > > части фигуры на тетраедры и подсчет обьема каждого из > них. > Не обязательно тетраэдры - это самый простой метод. Возьми > книжку по численным методам. Раздел численное > интегрирование. Разбиение на тетраэдры - это аналог метода > эйлера для плоскости (учитывается только первая > производная). Чем больше производных будет учитываться, тем > больше будет точность интегрирования. мне высокая точность не принципиальна..
> > Но это способ на первый взгляд слишком гиморный, > хотелось > > бы упростить, тем более, наверняка должны же быть уже > > готовые резализации в инете. > Гы. Просто ты не видел гиморных методов :-) > > > Короче, никто не знает готовую библиотеку, в которой > есть > > функции для вычисления обьема любой фигуры? Или ни у > кого > > нет примера использования метода триангуляции? > Любая книжка по численным методам эх, скорее всего придется так и сделать..
2 whiletrue: спасибо за линк
Млин, так бы и сказал, что объект - многогранник24.06.04 11:57 Автор: amirul <Serge> Статус: The Elderman
> объект уже задан, т.е. есть координаты вершин Объект задан набором многогранников. Ну дык тогда никаких приближенных методов и символьных интегрирований - после разбиения на тетраэдры получишь точный результат.
Если фигура выпуклая, то алгоритм тривиален: 1) Сначала находишь результат отсечения (перебираешь все грани и вычисляешь линию пересечения с плоскостью, потом перебираешь все ребра этой грани и вычисляешь точки пересечения с вычисленной линией) - получаешь модифицированный набор граней и вершин. Но результат все равно останется выпуклым. 2) Произвольно выбираешь одну из вершин, остальные вершины выбираешь по три 3) Суммируешь объемы всех тетраэдров, имеющих вершинами выбранную и все комбинации по три.
Если фигура не выпуклая, то первый шаг остается таким же, а вот дальше придется помучаться. В данном случае, имхо, лучше всего разбить фигуру на выпуклые и использовать уже описанный алгоритм. Для этого перебираешь все грани и смотришь находятся ли все точки по одну полуплоскоть от этой грани (расстояние от точки до плоскости имеет один и тот же знак). Если да, то ничего делать не надо), а если нет, то рассекаем фигуру (алгоритм такой же как в первом пункте для выпуклой фигуры) вдоль этой плоскости и продолжаем работу уже с двумя отдельными фигурами.
> 2 amirul: язык программированию любой, но я выбрал C. С > Mapple ни разу не работал. > > > У тебя трудности с теорией? Строится мат. модель. Она > в > > основе. Находится формула для вычисления > объёма. Для вывода > > на экран преобразовываешь то, что у тебя в мат. модели > в > > то, что понимает твоя граф. библиотека. Для расчёта > объёма > > подставляешь то, что у тебя в мат. модели в функцию, > > которая считает объём. > > С математической моделью это понятно, проблема как раз в > формуле нахождения обьема. Точнее в написании функции, > которая будет вычислять обьем любого обьекта. Ведь > отсеченная часть может иметь другое кол-во вершин, быть > выпуклой/вогнутой итд. И именно такую возможность я бы > хотел получить, заюзав какую-нибудь готовую библиотеку. > Вообще, если вычислять объем "самому", мне рекомендуют > использовать метод триангуляции, т.е. разбиение отсеченной > части фигуры на тетраедры и подсчет обьема каждого из них. > Но это способ на первый взгляд слишком гиморный, хотелось > бы упростить, тем более, наверняка должны же быть уже > готовые резализации в инете. > > Короче, никто не знает готовую библиотеку, в которой есть > функции для вычисления обьема любой фигуры? Или ни у кого > нет примера использования метода триангуляции?
А в чём объём будешь мерять? В кубических пикселях? ;-)21.06.04 11:48 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 21.06.04 11:51 Количество правок: 1
> Нужно вычислить объем части фигуры, отсеченной плоскостью. > Может кто-нибудь знает графические библиотеки, имеющие > такую функцию? Интересуют любые варианты, даже основанные > на MFC или OpenGL/DirectX. OpenGL/DirectX это библиотеки для 3D-рендеринга... Ихние внутренние представления и алгоритмы СИЛЬНО отличаются от традиционной стереометрии. Эти библиотеки признаны обманывать человеческое восприятие с максимальной для компьютера эффективностью, а не моделировать трёхмерные миры с точностью до вычисления объёмов ;-)
Так что бери справочник по стереометрии и в бой! :)
Насколько я знаю, продвинутые CAD'ы могут считать объёмы деталей/полостей...
Я так понимаю, можно посчитать в процентах22.06.04 15:11 Автор: whiletrue <Роман> Статус: Elderman