Масштабируемость, дифференцируемость, копланарность - PullRequest
0 голосов
/ 02 февраля 2011

Я ищу (почти всюду) дифференцируемую функцию f(p1, p2, p3, p4), которая с учетом четырех точек даст мне масштабно-независимую меру копланарности. Это ноль, если четыре точки лежат на одной плоскости и положительны в противном случае. Независимость от масштаба означает, что когда я равномерно масштабирую все точки, мера плоскостности будет возвращаться одинаково.

Я придумал кое-что довольно сложное и не легко оптимизируемое. Определите u=p2-p1, v=p3-p1, w=p4-p1. Тогда мера планарности:

[(u x v) * w]² / (|u x v|² |w|²)

, где x означает перекрестное произведение, а '*' означает точечное произведение.

Числитель - это просто (квадрат) объема тетраэдра, определяемого четырьмя точками, а знаменатель является нормализующим фактором, который делает эту меру просто косинусом угла. Поскольку углы не меняются при равномерном масштабе, эта функция удовлетворяет всем моим требованиям.

Кто-нибудь знает что-нибудь попроще?

Alex.

Edit:

В конечном итоге я использовал метод расширенного лагранжиана для оптимизации, поэтому мне не нужно, чтобы он был независимым от масштаба. Достаточно просто использовать ограничение (u x v) * w = 0, поскольку процедура оптимизации находит правильный множитель Лагранжа для компенсации масштаба.

Ответы [ 3 ]

2 голосов
/ 02 февраля 2011

Ваши методы кажутся нормальными, я бы сделал что-то подобное для эффективной реализации:

  • Возьми себя, v, w, как ты сделал
  • Нормализуйте их: существуют различные приемы для эффективной оценки обратного квадратного корня с любой точностью, например, этот драгоценный камень . Большинство современных процессоров имеют встроенные функции для этой операции.
  • Взять f = | det (u, v, w) | (= (u x v). w). Есть быстрые прямые реализации для матриц 3х3; см. ответ @ батти на этот вопрос .

Это равносильно тому, что вы делаете без квадратов. Это все еще однородно и почти везде дифференцируемо. Возьмите квадрат определителя, если вы хотите везде что-то дифференцировать.

РЕДАКТИРОВАТЬ : @phkahler неявно предложил использовать отношение радиуса вписанной сферы к радиусу описанной сферы в качестве меры плоскостности. Это ограниченная дифференцируемая функция точек, инвариантная по масштабированию. Тем не менее, это по крайней мере так же сложно вычислить, как вы (и я) предлагаете. Особенно вычисление радиуса описанной сферы очень чувствительно к ошибкам округления.

1 голос
/ 03 февраля 2011

Мера, которая должна быть симметричной относительно переупорядочения точек:

((u x v).w)^2/(|u||v||w||u-v||u-w||v-w|)

, который пропорционален объему квадрата тетраэдра, деленному на все 6 длин ребер. Это не проще, чем ваша формула или формула Александра С., но не намного сложнее. Однако оно становится ненужным, когда любые две точки совпадают.

Лучше себя вести, нечувствительный к порядку формула:

let a = u x v
    b = v x w
    c = w x u
(a.w)^2/(|a| + |b| + |c| + |a+b+c|)^3

, что-то вроде объема тетраэдра, деленного на площадь поверхности, но поднятого до соответствующих степеней, чтобы сделать все это нечувствительным к масштабу Это также немного сложнее, чем ваша формула, но работает, если все 4 точки не коллинеарны.

1 голос
/ 02 февраля 2011

Как насчет

|(u x v) * w| / |u|^3

(и вы можете изменить |x| на (x)^2, если считаете, что это проще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...