Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.03.2010, 00:56
Новичок

Отправить личное сообщение для d.dragon.n76 Посмотреть профиль Найти все сообщения от d.dragon.n76
 
Регистрация: 26.12.2008
Сообщений: 24

сечение 3D фигуры
Попробовал написать код построения сечения 3D фигуры плоскостью xOz. Фигура состоит из треугольников. Проблема: выпуклая непрерывная фигура без дырок и разрывов в сечении получается в виде ломаной с отсуствующими отрезками. s структура с полями A B C --- типа Vector3D . В вектор из структур s я зачитал фигуру.

Код:
std::ofstream fsec("sec");
int i;
Vector3D M, N, X;
for(i=0; i<nGt; ++i){
M = s[i].A;
N = s[i].B;
// (X.x-N.x)/(M.x-N.x)=(0.0-N.y)/(M.y-N.y) => X.x=N.x-N.y*(M.x-N.x)/(M.y-N.y)
// (X.z-N.z)/(M.z-N.z)=(0.0-N.y)/(M.y-N.y) => X.z=N.z-N.y*(M.z-N.z)/(M.y-N.y)
if(fabs(M.y)<eps&&fabs(N.y)<eps) {
fsec<<M.x<<' '<<M.z<<std::endl<<N.x<<' '<<N.z<<std::endl;
} else if( ((M.y<=0.0)&&(N.y>=0.0)) || ((M.y>=0.0)&&(N.y<=0.0)) ) {
X.x=N.x-N.y*(M.x-N.x)/(M.y-N.y);
X.z=N.z-N.y*(M.z-N.z)/(M.y-N.y);
fsec << X.x << ' ' << X.z << std::endl ;
}

M = s[i].B;
N = s[i].C;
if(fabs(M.y)<eps&&fabs(N.y)<eps) {
fsec<<M.x<<' '<<M.z<<std::endl<<N.x<<' '<<N.z<<std::endl;
} else if( ((M.y<=0.0)&&(N.y>=0.0)) || ((M.y>=0.0)&&(N.y<=0.0)) ) {
X.x=N.x-N.y*(M.x-N.x)/(M.y-N.y);
X.z=N.z-N.y*(M.z-N.z)/(M.y-N.y);
fsec << X.x << ' ' << X.z << std::endl ;
}

M = s[i].C;
N = s[i].A;
if(fabs(M.y)<eps&&fabs(N.y)<eps) {
fsec<<M.x<<' '<<M.z<<std::endl<<N.x<<' '<<N.z<<std::endl;
} else if( ((M.y<=0.0)&&(N.y>=0.0)) || ((M.y>=0.0)&&(N.y<=0.0)) ) {
X.x=N.x-N.y*(M.x-N.x)/(M.y-N.y);
X.z=N.z-N.y*(M.z-N.z)/(M.y-N.y);
fsec << X.x << ' ' << X.z << std::endl ;
}
fsec << std::endl;
} // for
  #2  
Старый 28.03.2010, 12:09
Местный

Отправить личное сообщение для prografix Посмотреть профиль Найти все сообщения от prografix
 
Регистрация: 03.11.2006
Адрес: Москва
Сообщений: 167

В коде не разбирался, но предполагаю, что отсутствующие отрезки могут появиться из-за прохождения плоскости по границе треугольника или вообще треугольники заданы некорректно ( не стыкуются ).
Кроме того использование eps часто приводит к неправильному результату.
Если известно, что фигура выпуклая, то можно найти все пересечения рёбер с плоскостью, а потом получить выпуклую оболочку этих точек.
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение фигуры гость Обработка изображений, звук, графика 1 27.03.2010 19:01
Реализовать сечение 3 эллипсоидов _Kvant_ Вычислительная геометрия 3 27.02.2010 16:31
Закраск фигуры гость Обработка изображений, звук, графика 6 16.02.2010 20:36
Помогите с определением данной фигуры ПЛЗ! Нелли Вычислительная геометрия 7 29.09.2008 17:45
Площадь фигуры ограниченой сплайнами Vektorr64 Вычислительная геометрия 2 20.05.2008 09:20