Процентная ошибка для 2 наборов трехмерных точек - PullRequest
2 голосов
/ 26 июня 2009

У меня есть эталонный набор из n точек и другой набор, который «аппроксимирует» каждую из этих точек. Как узнать абсолютную / процентную ошибку между аппроксимацией и моим эталонным набором.

Другими словами, у меня есть готовая анимация и симуляция. Как я узнаю, сколько стоит «дрейф» между двумя единицами? То есть насколько хороша симуляция, аппроксимирующая вершины по сравнению с вершинами анимации.

На самом деле я делаю что-то подобное для всех вершин: | фактическая - ссылка | / | актуальная | а затем усреднить ошибки путем деления количества вертов. Это правильно вообще?

Ответы [ 2 ]

2 голосов
/ 28 июня 2009

Действительно ли это измерение должно быть в процентах? Я предполагаю, что у вас есть один набор ссылок, а затем несколько наборов, которые приближаются к этому набору, и вы хотите выбрать тот, который является «лучшим» в некотором смысле.

Я бы добавил квадрат расстояния между фактическим и эталонным:

avgSquareDrift = сумма (1..n, | фактическая - ссылка | ^ 2) / numvertices

Основным преимуществом этого подхода является то, что нам не нужно применять квадратный корень, что является дорогостоящей операцией.

1 голос
/ 26 июня 2009

Если вы сложите формулу, которая у вас есть, по всем вершинам (а затем поделите на количество вершин), вы рассчитаете среднюю процентную ошибку в положении для всех вершин.

Однако эта процентная ошибка, вероятно, не совсем та, которую вы хотите, потому что вершины, расположенные ближе к началу координат, будут иметь большую «процентную ошибку» для того же смещения, поскольку их величина меньше.

Если вы вообще ничего не делите, у вас будет средний дрейф в мировых единицах, который может быть именно тем, что вы хотите:

average_drift = sum(1->numvertices, |actual - reference|) / numvertices

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

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

orientation_drift = sum(1->numvertices, |actual - reference| / jointlength) / numvertices
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...