Как вычислить центр эллипса двумя точками и размерами радиуса

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

19
задан Igor Brejc 9 October 2010 в 18:45
поделиться

3 ответа

Таким образом, решение здесь:

параметрическая формула эллипса:

x = x0 + a * cos(t)
y = y0 + b * sin(t)

Позволяют нам поместить известные координаты двух точек к нему:

x1 = x0 + a * cos(t1)
x2 = x0 + a * cos(t2)
y1 = y0 + b * sin(t1)
y2 = y0 + b * sin(t2)

Теперь у нас есть система уравнений с 4 переменными: центр эллипса (x0/y0) и двух углов t1, t2

Позволяет нам вычесть уравнения для избавлений от центральных координат:

x1 - x2 = a * (cos(t1) - cos(t2))
y1 - y2 = b * (sin(t1) - sin(t2))

Это может быть переписано (с формулами идентификационных данных продукта к сумме) как:

(x1 - x2) / (2 * a) = sin((t1 + t2) / 2) * sin((t1 - t2) / 2)
(y2 - y1) / (2 * b) = cos((t1 + t2) / 2) * sin((t1 - t2) / 2)

Позволяют нам заменить некоторые уравнения:

r1: (x1 - x2) / (2 * a)
r2: (y2 - y1) / (2 * b)
a1: (t1 + t2) / 2
a2: (t1 - t2) / 2

Затем мы получаем простую систему уравнений:

r1 = sin(a1) * sin(a2)
r2 = cos(a1) * sin(a2)

Делящееся первое уравнение вторыми продуктами:

a1 = arctan(r1/r2)

Добавление этого результата к первому уравнению дает:

a2 = arcsin(r2 / cos(arctan(r1/r2)))

Или, простой (использование составов аккуратных и обратных аккуратных функций):

a2 = arcsin(r2 / (1 / sqrt(1 + (r1/r2)^2)))

или еще более простой:

a2 = arcsin(sqrt(r1^2 + r2^2))

Теперь начальная четыре системы уравнений могут быть разрешены с легким и всеми углами, а также координаты центра затмения могут быть найдены.

24
ответ дан 30 November 2019 в 04:04
поделиться

Промежуточный вопрос довольно легок..., Вы не делаете. Вы разрабатываете центр эллипса от ограничительной рамки (а именно, центр поля является центром эллипса, пока эллипс центрируется в поле).

Для Вашего первого вопроса, я посмотрел бы на полярную форму уравнения эллипса, которое доступно на Википедия . Необходимо было бы разработать эксцентриситет эллипса также.

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

1
ответ дан 30 November 2019 в 04:04
поделиться

Эллипс не может быть определен только двумя точками. Даже круг (специальный эллипс в корпусе) определяется тремя точками.

Даже с тремя точками, у Вас были бы бесконечные замещающие знаки, проходящие через эти три точки (думайте: вращение).

Примечание, что ограничительная рамка предлагает центр эллипса и по всей вероятности предполагает, что его главные и незначительные оси параллельны x, y (или y, x) оси.

1
ответ дан 30 November 2019 в 04:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: