вопрос по триангуляции
От: piAnd Россия  
Дата: 23.11.04 18:19
Оценка:
Делаю проверку условия Делоне так:
(как в статье Скворцова А.В.)
float x0,y0,x1,y1,x2,y2,x3,y3,ca,cb;

ca=(x0-x1)*(x0-x3)+(y0-y1)*(y0-y3);
cb=(x2-x1)*(x2-x3)+(y2-y1)*(y2-y3);

if(ca<0&&cb<0)
    return false;//не выполняется

if(ca>=0&&cb>=0)
    return true;//выполняется

if(((x0-x1)*(y0-y3)-(x0-x3)*(y0-y1))*cb+((x2-x1)*(y2-y3)-(x2-x3)*(y2-y1))*ca>=0)
    return true;

return false;


Причем все треугольники в триангуляции у меня отрицательно-направленные (обход вершин делается по ч.с.). Соответственно (x1,y1)-(x2,y2)-(x3,y3) — обход по ч.с. и (x0,y0) — точка смежного треугольника для проверки.
Данная процедура не работает, непойму в чем может быть подвох проверки!!!

Почему-то из всех опробованных методов работает только тупая проверка попадания в окружность...
Может необходимо еще какое-то условие, особо не оговаривающееся в статьях???
Re: вопрос по триангуляции
От: Lone Беларусь  
Дата: 23.11.04 20:08
Оценка: 3 (1)
Здравствуйте, piAnd, Вы писали:

[]

Сталкивался с подобной проблемой. К сожалению, дело было не то чтобы давно, но и не настолько недавно, чтобы я помнил, в чем именно здесь загвоздка. Помню лишь, что пришлось заново выводить формулы. Разбираться снова в этом желания как-то нет (и так намучался я с этой триангуляцией, до сих пор покоя не дает ), поэтому просто приведу фрагмент кода (вроде как работает):
    // Выполняем промежуточные вычисления.
    const double dx1 = x1 - x0;
    const double dx2 = x3 - x0;
    const double dx3 = x1 - x2;
    const double dx4 = x3 - x2;
    const double dy1 = y1 - y0;
    const double dy2 = y3 - y0;
    const double dy3 = y1 - y2;
    const double dy4 = y3 - y2;
    const double sa = dx1 * dx2 + dy1 * dy2;
    const double sb = dx3 * dx4 + dy3 * dy4;

    // Проверяем условие Делоне.
    if (sa >= 0.0 && sb >= 0.0)
        return TRUE;
    if (sa < 0.0 && sb < 0.0)
        return FALSE;
    return (((dx2 * dy1 - dx1 * dy2) * sb + sa * (dx3 * dy4 - dx4 * dy3)) >= 0.0);


PS Недавно вот поставили задачу перейти от построения триангуляции Делоне к построению триангуляции Делоне с ограничениями (чтобы ребра триангуляции не пересекали отрезки горизонталей и границ водных поверхностей), так что головная боль снова ко мне вернулась
"Жизнь проходит не так, как представлялось в детстве" © Остап Бендер
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.