Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Таким образом, решение здесь:
параметрическая формула эллипса:
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))
Теперь начальная четыре системы уравнений могут быть разрешены с легким и всеми углами, а также координаты центра затмения могут быть найдены.
Промежуточный вопрос довольно легок..., Вы не делаете. Вы разрабатываете центр эллипса от ограничительной рамки (а именно, центр поля является центром эллипса, пока эллипс центрируется в поле).
Для Вашего первого вопроса, я посмотрел бы на полярную форму уравнения эллипса, которое доступно на Википедия . Необходимо было бы разработать эксцентриситет эллипса также.
Или Вы могли, скот вынудить значения покинуть ограничительную рамку... удается, находится ли точка на эллипсе и соответствует углу, и выполните итерации через каждую точку в ограничительной рамке.
Эллипс не может быть определен только двумя точками. Даже круг (специальный эллипс в корпусе) определяется тремя точками.
Даже с тремя точками, у Вас были бы бесконечные замещающие знаки, проходящие через эти три точки (думайте: вращение).
Примечание, что ограничительная рамка предлагает центр эллипса и по всей вероятности предполагает, что его главные и незначительные оси параллельны x, y (или y, x) оси.