Вы должны решить, какую толерантность будет использовать ваш метод. Хотя в вашем примере используются точки, которые можно выразить в плавающей точке, на границе эллипса есть много точек, которые будут , а не , поэтому решение о том, находится ли точка «на границе», неясно. резать. Если вам все равно, то я бы предложил сделать эллипс немного «больше», чем вы на самом деле хотите, и использовать встроенный метод contains()
.
Если вы хотите написать свой собственный метод, это так же просто, как взять формулу для эллипса, вставить значения X и Y точки, которую вы хотите проверить, и наблюдать результат:
bool isInsideOfOrOnBorderOfEllipse = ((x*x)/(a*a) + (y*y)/(b*b)) <= 1;
Обратите внимание, что это все еще сталкивается с проблемой непредставимых точек, поэтому некоторые точки, которые, по вашему мнению, должны быть "на границе", не будут.
Обновление : Учитывая, что вы просто используете встроенный объект эллипса (и, следовательно, задаете высоту / ширину, а не общие параметры эллипса), было бы целесообразно взглянуть на источник для contains()
здесь: http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/ffa98eed5766/src/share/classes/java/awt/geom/Ellipse2D.java
Извлечь новый класс и затем переопределить contains()
. В переопределенной версии просто скопируйте код, за исключением того, что используйте <=
вместо <
, и все будет хорошо.