структура данных с четырьмя ребрами - PullRequest
2 голосов
/ 07 марта 2012

Я просматривал статью Гибаса-Столфи, в которой описывается четырехугольная структура данных, которая может быть использована для вычисления триангуляций Делоне. Я использую Java для реализации структуры данных QuadEdge.

Я следил за реализацией, упомянутой на этом сайте Структура данных Quad Edge Java .

Короче говоря, структура Quad Edge состоит из 2 операций, а именно:

  1. makeEdge -> Возвращает Quad Edge для ребра e, присутствующего в подразделении
  2. splice (a, b) -> Функция, используемая для изменения топологии, связанной с четырехугольными ребрами a и b.

Теперь структура данных Quad Edge состоит из 2 полей, а именно указателя данных и следующего.

Следующее поле рассчитывается по формуле: e [r] .Next = e (Rot ^ r) Onext.

Для идеи об Onext я прилагаю фигуру из бумаги Гибаса-Столфи

Edge Functions

Теперь пример кода устанавливает следующие указатели для всех 4 частей ребра четырехугольника. Они установлены следующим образом 1 ,

q0 = new QuadEdge();
q1 = new QuadEdge();
q2 = new QuadEdge();
q3 = new QuadEdge();

q0.Onext = q0; 
q1.Onext = q3; //on the sphere, left=right (How?? or Why??)
q2.Onext = q2; 
q3.Onext = q1;

Мой вопрос был таков: если Onext i.e (следующий край против часовой стрелки, имеющий то же начало, что и e), является самим ребром, почему это другой край, когда берется двойной край.

Я мог бы поставить этот вопрос не в том месте. Я прошу прощения за это и любые неудобства, вызванные этим.

Спасибо, Chaitanya

1 Ответ

1 голос
/ 03 сентября 2012

Похоже, что q1 и q3 имеют начало в одной и той же точке (фиктивная точка на бесконечности). Вот почему q1.oNext == q3 и q3.oNext == q1.

...