Класс Path2D
- Все реализуемые интерфейсы:
Shape, Cloneable
- Прямые известные подклассы:
Path2D.Double, Path2D.Float
public abstract sealed class Path2D extends Object implements Shape, Cloneable permits Path2D.Double, Path2D.Float
Path2D предоставляет простую, но гибкую форму, представляющую произвольный геометрический путь. Он может полностью представлять любой путь, который можно перебирать с помощью интерфейса PathIterator, включая все его типы сегментов и правила обхода, и реализует все основные методы проверки попадания интерфейса Shape. Используйте Path2D.Float для работы с данными, которые можно представить и использовать с точностью чисел с плавающей точкой. Используйте Path2D.Double для данных, требующих точности или диапазона чисел двойной точности.
Path2D предоставляет именно те средства, которые необходимы для базового создания и управления геометрическим путём, а также реализации указанных выше интерфейсов с минимальной дополнительной интерпретацией. Если требуется манипулировать внутренними областями замкнутых геометрических фигур не ограничиваясь простой проверкой попадания, класс Area предоставляет дополнительные возможности, специально предназначенные для замкнутых фигур. Хотя оба класса формально реализуют интерфейс Shape, они имеют разные назначения и вместе предоставляют два полезных представления геометрической фигуры: Path2D работает главным образом с траекторией, образованной сегментами пути, а Area — с интерпретацией и обработкой областей, заключённых в двумерном геометрическом пространстве.
В интерфейсе PathIterator приведены более подробные описания типов сегментов, из которых состоит путь, и правил обхода, определяющих, какие области находятся внутри или снаружи пути.
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static class |
Path2D.Double |
Класс Double определяет геометрический путь с координатами, хранящимися в формате чисел с плавающей точкой двойной точности. |
static class |
Path2D.Float |
Класс Float определяет геометрический путь с координатами, хранящимися в формате чисел с плавающей точкой одинарной точности. |
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
WIND_EVEN_ODD |
Правило обхода чётное-нечётное для определения внутренней области пути. |
static final int |
WIND_NON_ZERO |
Правило обхода ненулевого значения для определения внутренней области пути. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void |
append |
Добавляет геометрию указанного объекта PathIterator к пути, при необходимости соединяя новую геометрию с существующими сегментами пути отрезком. |
final void |
append |
Добавляет геометрию указанного объекта Shape к пути, при необходимости соединяя новую геометрию с существующими сегментами пути отрезком. |
abstract Object |
clone() |
Создаёт новый объект того же класса, что и этот объект. |
final void |
closePath() |
Закрывает текущий подпуть, проводя прямую линию обратно к координатам последнего moveTo. |
final boolean |
contains |
Проверяет, находятся ли указанные координаты внутри границы Shape, как описано в определении принадлежности внутренней области. |
final boolean |
contains |
Проверяет, полностью ли внутренняя область Shape содержит указанную прямоугольную область. |
static boolean |
contains |
Проверяет, находятся ли указанные координаты внутри замкнутой границы указанного PathIterator. |
static boolean |
contains |
Проверяет, находится ли указанная прямоугольная область целиком внутри замкнутой границы указанного PathIterator. |
static boolean |
contains |
Проверяет, находится ли указанная точка Point2D внутри замкнутой границы указанного PathIterator. |
static boolean |
contains |
Проверяет, находится ли указанный прямоугольник Rectangle2D целиком внутри замкнутой границы указанного PathIterator. |
final boolean |
contains |
Проверяет, находится ли указанная точка Point2D внутри границы Shape, как описано в определении принадлежности внутренней области. |
final boolean |
contains |
Проверяет, полностью ли внутренняя область Shape содержит указанный Rectangle2D. |
final Shape |
createTransformedShape |
Возвращает новый Shape, представляющий преобразованную версию этого Path2D. |
abstract void |
curveTo |
Добавляет к пути криволинейный сегмент, определяемый тремя новыми точками, строя кривую Безье, которая проходит через текущие координаты и указанные координаты (x3,y3); указанные точки (x1,y1) и (x2,y2) используются в качестве управляющих точек кривой Безье. |
final Rectangle |
getBounds() |
Возвращает целочисленный Rectangle, полностью охватывающий Shape. |
final Point2D |
getCurrentPoint() |
Возвращает последние добавленные в конец пути координаты в виде объекта Point2D. |
final PathIterator |
getPathIterator |
Возвращает объект-итератор, который проходит вдоль границы Shape и предоставляет доступ к упрощённому представлению геометрии контура Shape. |
final int |
getWindingRule() |
Возвращает правило обхода, используемое для заливки. |
final boolean |
intersects |
Проверяет, пересекается ли внутренняя область Shape с внутренней областью указанной прямоугольной области. |
static boolean |
intersects |
Проверяет, пересекается ли внутренняя область указанного PathIterator с внутренней областью заданного набора прямоугольных координат. |
static boolean |
intersects |
Проверяет, пересекается ли внутренняя область указанного PathIterator с внутренней областью указанного Rectangle2D. |
final boolean |
intersects |
Проверяет, пересекается ли внутренняя область Shape с внутренней областью указанного Rectangle2D. |
abstract void |
lineTo |
Добавляет точку к пути, проводя прямую линию от текущих координат к новым указанным координатам, заданным с двойной точностью. |
abstract void |
moveTo |
Добавляет точку к пути, перемещаясь к указанным координатам, заданным с двойной точностью. |
abstract void |
quadTo |
Добавляет к пути криволинейный сегмент, определяемый двумя новыми точками, строя квадратичную кривую, которая проходит через текущие координаты и указанные координаты (x2,y2); указанная точка (x1,y1) используется в качестве управляющей точки квадратичной параметрической кривой. |
final void |
reset() |
Очищает путь. |
final void |
setWindingRule |
Задаёт для этого пути указанное правило обхода. |
abstract void |
transform |
Преобразует геометрию этого пути с помощью указанного AffineTransform. |
abstract void |
trimToSize() |
Уменьшает ёмкость этого экземпляра Path2D до его текущего размера. |
Методы, объявленные в классе Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Указывает, равен ли этот объект некоторому другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из следующих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного интервала реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного интервала реального времени. |
Методы, объявленные в интерфейсе Shape
getBounds2D, getPathIterator | Модификатор и тип | Метод | Описание |
|---|---|---|
Rectangle2D |
getBounds2D() |
Возвращает ограничивающую рамку Shape с более высокой точностью, чем метод getBounds. |
PathIterator |
getPathIterator |
Возвращает объект-итератор, который проходит вдоль границы Shape и предоставляет доступ к геометрии контура Shape. |
Подробное описание полей
WIND_EVEN_ODD
public static final int WIND_EVEN_ODD
- Начиная с:
- 1.6
- См. также:
WIND_NON_ZERO
public static final int WIND_NON_ZERO
- Начиная с:
- 1.6
- См. также:
Подробное описание методов
moveTo
public abstract void moveTo(double x, double y)
- Параметры:
-
x— заданная координата X -
y— заданная координата Y - Начиная с:
- 1.6
lineTo
public abstract void lineTo(double x, double y)
- Параметры:
-
x— заданная координата X -
y— заданная координата Y - Начиная с:
- 1.6
quadTo
public abstract void quadTo(double x1, double y1, double x2, double y2)
(x2,y2), используя заданную точку (x1,y1) в качестве управляющей точки квадратичной параметрической кривой. Все координаты представлены числами двойной точности.- Параметры:
-
x1— координата X управляющей точки квадратичной кривой -
y1— координата Y управляющей точки квадратичной кривой -
x2— координата X конечной точки -
y2— координата Y конечной точки - Начиная с:
- 1.6
curveTo
public abstract void curveTo(double x1, double y1, double x2, double y2, double x3, double y3)
(x3,y3), используя заданные точки (x1,y1) и (x2,y2) в качестве управляющих точек кривой Безье. Все координаты представлены числами двойной точности.- Параметры:
-
x1— координата X первой управляющей точки кривой Безье -
y1— координата Y первой управляющей точки кривой Безье -
x2— координата X второй управляющей точки кривой Безье -
y2— координата Y второй управляющей точки кривой Безье -
x3— координата X конечной точки -
y3— координата Y конечной точки - Начиная с:
- 1.6
closePath
public final void closePath()
moveTo. Если путь уже замкнут, этот метод ничего не делает.- Начиная с:
- 1.6
append
public final void append(Shape s, boolean connect)
Shape к пути, при необходимости соединяя новую геометрию с существующими сегментами пути отрезком. Если параметр connect равен true и путь не пуст, любой начальный moveTo в геометрии добавляемого Shape преобразуется в сегмент lineTo. Если конечные координаты такого соединительного сегмента lineTo совпадают с конечными координатами открытого в данный момент подпути, сегмент пропускается как избыточный. Правило обхода указанного Shape игнорируется, а добавленная геометрия подчиняется правилу обхода, заданному для этого пути.- Параметры:
-
s—Shape, геометрия которого добавляется к этому пути -
connect— логическое значение, определяющее, следует ли преобразовать начальный сегментmoveToв сегментlineToдля соединения новой геометрии с существующим путем - Начиная с:
- 1.6
append
public abstract void append(PathIterator pi, boolean connect)
PathIterator к пути, при необходимости соединяя новую геометрию с существующими сегментами пути отрезком. Если параметр connect равен true и путь не пуст, любой начальный moveTo в геометрии добавляемого Shape преобразуется в сегмент lineTo. Если конечные координаты такого соединительного сегмента lineTo совпадают с конечными координатами открытого в данный момент подпути, сегмент пропускается как избыточный. Правило обхода указанного Shape игнорируется, а добавленная геометрия подчиняется правилу обхода, заданному для этого пути.- Параметры:
-
pi—PathIterator, геометрия которого добавляется к этому пути -
connect— логическое значение, определяющее, следует ли преобразовать начальный сегментmoveToв сегментlineToдля соединения новой геометрии с существующим путем - Начиная с:
- 1.6
getWindingRule
public final int getWindingRule()
- Возвращает:
- целое число, представляющее текущее правило обхода.
- Начиная с:
- 1.6
- См. также:
setWindingRule
public final void setWindingRule(int rule)
- Параметры:
-
rule— целое число, представляющее заданное правило обхода - Исключения:
-
IllegalArgumentException— еслиruleне равен ниWIND_EVEN_ODD, ниWIND_NON_ZERO - Начиная с:
- 1.6
- См. также:
getCurrentPoint
public final Point2D getCurrentPoint()
Point2D.- Возвращает:
- объект
Point2D, содержащий конечные координаты пути, илиnull, если путь не содержит точек. - Начиная с:
- 1.6
reset
public final void reset()
- Начиная с:
- 1.6
transform
public abstract void transform(AffineTransform at)
AffineTransform. Геометрия преобразуется на месте, что навсегда изменяет границу, определяемую этим объектом.- Параметры:
-
at—AffineTransform, используемый для преобразования области - Начиная с:
- 1.6
createTransformedShape
public final Shape createTransformedShape(AffineTransform at)
Shape, представляющий преобразованную версию этого Path2D. Обратите внимание, что точный тип и точность координат возвращаемого значения для этого метода не определены. Метод вернет Shape, точность которого для преобразованной геометрии будет не ниже точности, поддерживаемой этим Path2D, однако она может и не быть выше. Если важно соотношение точности и объема хранимых данных результата, для явного выбора следует использовать удобные конструкторы подклассов Path2D.Float и Path2D.Double.- Параметры:
-
at—AffineTransform, используемый для преобразования новогоShape. - Возвращает:
- новый
Shape, преобразованный с помощью указанногоAffineTransform. - Начиная с:
- 1.6
getBounds
public final Rectangle getBounds()
Rectangle, полностью охватывающий Shape. Обратите внимание, что нет гарантии, что возвращенный Rectangle является наименьшим ограничивающим прямоугольником, охватывающим Shape; гарантируется только, что Shape целиком находится внутри указанного Rectangle. Возвращенный Rectangle также может не охватывать Shape полностью, если Shape выходит за ограниченный диапазон целочисленного типа данных. Метод getBounds2D обычно возвращает более точный ограничивающий прямоугольник благодаря большей гибкости представления. Обратите внимание, что определение принадлежности внутренней области может приводить к ситуациям, когда точки на определяющем контуре shape не считаются принадлежащими возвращенному объекту bounds, но только в тех случаях, когда эти точки также не считаются принадлежащими исходному shape.
Если point находится внутри shape согласно методу contains(point), то она должна находиться внутри возвращенного объекта границ Rectangle согласно методу contains(point) объекта bounds. В частности:
shape.contains(x,y) требует bounds.contains(x,y)
Если point не находится внутри shape, она всё же может находиться внутри объекта bounds:
bounds.contains(x,y) не подразумевает shape.contains(x,y)
contains
public static boolean contains(PathIterator pi, double x, double y)
PathIterator. Этот метод предоставляет базовые средства для реализации поддержки метода Shape.contains(double, double) классами, реализующими интерфейс Shape.
- Параметры:
-
pi— указанныйPathIterator -
x— заданная координата X -
y— заданная координата Y - Возвращает:
-
true, если указанные координаты находятся внутри указанногоPathIterator; в противном случае —false - Начиная с:
- 1.6
contains
public static boolean contains(PathIterator pi, Point2D p)
Point2D внутри замкнутой границы указанного PathIterator. Этот метод предоставляет базовые средства для реализации поддержки метода Shape.contains(Point2D) классами, реализующими интерфейс Shape.
- Параметры:
-
pi— указанныйPathIterator -
p— указанныйPoint2D - Возвращает:
-
true, если указанные координаты находятся внутри указанногоPathIterator; в противном случае —false - Начиная с:
- 1.6
contains
public final boolean contains(double x, double y)
Shape, как описано в определении принадлежности внутренней области.contains
public final boolean contains(Point2D p)
Point2D внутри границы Shape, как описано в определении принадлежности внутренней области.contains
public static boolean contains(PathIterator pi, double x, double y, double w, double h)
PathIterator. Этот метод предоставляет базовые средства для реализации поддержки метода Shape.contains(double, double, double, double) классами, реализующими интерфейс Shape.
В целях консервативной оценки этот метод может вернуть false, если указанная прямоугольная область пересекает сегмент пути, но этот сегмент не является границей между внутренней и внешней областями пути. Такие сегменты могут целиком находиться внутри пути, если они принадлежат пути с правилом обхода WIND_NON_ZERO или если сегменты повторно проходятся в обратном направлении, так что две группы сегментов взаимно компенсируются и между ними нет внешней области. Чтобы определить, являются ли сегменты настоящими границами внутренней области пути, потребовались бы обширные вычисления с учетом всех сегментов пути и правила обхода, что выходит за рамки данной реализации.
- Параметры:
-
pi— указанныйPathIterator -
x— заданная координата X -
y— заданная координата Y -
w— ширина указанной прямоугольной области -
h— высота указанной прямоугольной области - Возвращает:
-
true, если указанныйPathIteratorсодержит заданную прямоугольную область; в противном случае —false. - Начиная с:
- 1.6
contains
public static boolean contains(PathIterator pi, Rectangle2D r)
Rectangle2D находится внутри замкнутой границы указанного PathIterator. Этот метод предоставляет базовые средства для реализации поддержки метода Shape.contains(Rectangle2D) классами, реализующими интерфейс Shape.
В целях консервативной оценки этот метод может вернуть false, если указанная прямоугольная область пересекает сегмент пути, но этот сегмент не является границей между внутренней и внешней областями пути. Такие сегменты могут целиком находиться внутри пути, если они принадлежат пути с правилом обхода WIND_NON_ZERO или если сегменты повторно проходятся в обратном направлении, так что две группы сегментов взаимно компенсируются и между ними нет внешней области. Чтобы определить, являются ли сегменты настоящими границами внутренней области пути, потребовались бы обширные вычисления с учетом всех сегментов пути и правила обхода, что выходит за рамки данной реализации.
- Параметры:
-
pi— указанныйPathIterator -
r— указанныйRectangle2D - Возвращает:
-
true, если указанныйPathIteratorсодержит указанныйRectangle2D; в противном случае —false. - Начиная с:
- 1.6
contains
public final boolean contains(double x, double y, double w, double h)
Shape содержит указанную прямоугольную область. Чтобы прямоугольная область считалась целиком находящейся внутри Shape, все точки, лежащие в ней, должны находиться внутри Shape. Метод Shape.contains() позволяет реализации Shape консервативно возвращать false в следующих случаях:
- метод
intersectвозвращаетtrue; и - вычисления, необходимые для определения того, полностью ли
Shapeсодержит прямоугольную область, требуют чрезмерных затрат.
Shapes этот метод может вернуть false, даже если Shape содержит прямоугольную область. Класс Area выполняет более точные геометрические вычисления, чем большинство объектов Shape, поэтому его можно использовать, если требуется более точный результат. В целях консервативной оценки этот метод может вернуть false, если указанная прямоугольная область пересекает сегмент пути, но этот сегмент не является границей между внутренней и внешней областями пути. Такие сегменты могут целиком находиться внутри пути, если они принадлежат пути с правилом обхода WIND_NON_ZERO или если сегменты повторно проходятся в обратном направлении, так что две группы сегментов взаимно компенсируются и между ними нет внешней области. Чтобы определить, являются ли сегменты настоящими границами внутренней области пути, потребовались бы обширные вычисления с учетом всех сегментов пути и правила обхода, что выходит за рамки данной реализации.
- Определено в:
-
containsв интерфейсеShape - Параметры:
-
x— координата X верхнего левого угла указанной прямоугольной области -
y— координата Y верхнего левого угла указанной прямоугольной области -
w— ширина указанной прямоугольной области -
h— высота указанной прямоугольной области - Возвращает:
-
true, если внутренняя областьShapeполностью содержит указанную прямоугольную область; в противном случае —false, а также еслиShapeсодержит прямоугольную область, методintersectsвозвращаетtrue, а вычисления для проверки включения требуют чрезмерных затрат. - Начиная с:
- 1.6
- См. также:
contains
public final boolean contains(Rectangle2D r)
Shape содержит указанный Rectangle2D. Метод Shape.contains() позволяет реализации Shape консервативно возвращать false в следующих случаях: - метод
intersectвозвращаетtrue; и - вычисления, необходимые для определения того, полностью ли
ShapeсодержитRectangle2D, требуют чрезмерных затрат.
Shapes этот метод может вернуть false, даже если Shape содержит Rectangle2D. Класс Area выполняет более точные геометрические вычисления, чем большинство объектов Shape, поэтому его можно использовать, если требуется более точный результат. В целях консервативной оценки этот метод может вернуть false, если указанная прямоугольная область пересекает сегмент пути, но этот сегмент не является границей между внутренней и внешней областями пути. Такие сегменты могут целиком находиться внутри пути, если они принадлежат пути с правилом обхода WIND_NON_ZERO или если сегменты повторно проходятся в обратном направлении, так что две группы сегментов взаимно компенсируются и между ними нет внешней области. Чтобы определить, являются ли сегменты настоящими границами внутренней области пути, потребовались бы обширные вычисления с учетом всех сегментов пути и правила обхода, что выходит за рамки данной реализации.
- Определено в:
-
containsв интерфейсеShape - Параметры:
-
r— указанныйRectangle2D - Возвращает:
-
true, если внутренняя областьShapeполностью содержитRectangle2D; в противном случае —false, а также еслиShapeсодержитRectangle2D, методintersectsвозвращаетtrue, а вычисления для проверки включения требуют чрезмерных затрат. - Начиная с:
- 1.6
- См. также:
intersects
public static boolean intersects(PathIterator pi, double x, double y, double w, double h)
PathIterator с внутренней областью заданного прямоугольника. Этот метод предоставляет базовые средства для реализации поддержки метода Shape.intersects(double, double, double, double) классами, реализующими интерфейс Shape.
В целях консервативной оценки этот метод может вернуть true, если указанная прямоугольная область пересекает сегмент пути, но этот сегмент не является границей между внутренней и внешней областями пути. Такая ситуация может возникнуть, если некоторые сегменты пути повторно проходятся в обратном направлении, так что две группы сегментов взаимно компенсируются и между ними нет внутренней области. Чтобы определить, являются ли сегменты настоящими границами внутренней области пути, потребовались бы обширные вычисления с учетом всех сегментов пути и правила обхода, что выходит за рамки данной реализации.
- Параметры:
-
pi— указанныйPathIterator -
x— заданная координата X -
y— заданная координата Y -
w— ширина указанной прямоугольной области -
h— высота указанной прямоугольной области - Возвращает:
-
true, если указанныйPathIteratorи внутренняя область заданного прямоугольника пересекаются; в противном случае —false. - Начиная с:
- 1.6
intersects
public static boolean intersects(PathIterator pi, Rectangle2D r)
PathIterator с внутренней областью указанного Rectangle2D. Этот метод предоставляет базовые средства для реализации интерфейса Shape и поддержки метода Shape.intersects(Rectangle2D).
Этот метод может консервативно возвращать true в случаях, когда указанная прямоугольная область пересекает сегмент пути, но этот сегмент не является границей между внутренней и внешней областями пути. Такая ситуация может возникнуть, если некоторый набор сегментов пути повторно проходится в обратном направлении, в результате чего эти два набора сегментов взаимно компенсируют друг друга, не образуя между собой внутренней области. Определение того, являются ли сегменты действительными границами внутренней области пути, потребовало бы сложных вычислений с учетом всех сегментов пути и правила заполнения, что выходит за рамки данной реализации.
- Параметры:
-
pi— указанныйPathIterator -
r— указаннаяRectangle2D - Возвращает:
-
true, если указанныйPathIteratorи внутренняя область указанногоRectangle2Dпересекаются; в противном случае —false. - Начиная с:
- 1.6
intersects
public final boolean intersects(double x, double y, double w, double h)
Shape с внутренней областью указанной прямоугольной области. Считается, что прямоугольная область пересекается с Shape, если какая-либо точка принадлежит одновременно внутренней области Shape и указанной прямоугольной области. Метод Shape.intersects() позволяет реализации Shape консервативно возвращать true в следующих случаях:
- высока вероятность пересечения прямоугольной области и
Shape, но - точное определение этого пересечения требует чрезмерно больших вычислительных затрат.
Shapes этот метод может вернуть true, даже если прямоугольная область не пересекается с Shape. Класс Area выполняет более точные вычисления геометрического пересечения, чем большинство объектов Shape, поэтому его можно использовать, если требуется более точный результат. Этот метод может консервативно возвращать true в случаях, когда указанная прямоугольная область пересекает сегмент пути, но этот сегмент не является границей между внутренней и внешней областями пути. Такая ситуация может возникнуть, если некоторый набор сегментов пути повторно проходится в обратном направлении, в результате чего эти два набора сегментов взаимно компенсируют друг друга, не образуя между собой внутренней области. Определение того, являются ли сегменты действительными границами внутренней области пути, потребовало бы сложных вычислений с учетом всех сегментов пути и правила заполнения, что выходит за рамки данной реализации.
- Определено в:
-
intersectsв интерфейсеShape - Параметры:
-
x— координата X верхнего левого угла указанной прямоугольной области -
y— координата Y верхнего левого угла указанной прямоугольной области -
w— ширина указанной прямоугольной области -
h— высота указанной прямоугольной области - Возвращает:
-
true, если внутренняя областьShapeи внутренняя область прямоугольной области пересекаются либо с высокой вероятностью пересекаются, а вычисление пересечения требует чрезмерно больших затрат; в противном случае —false. - Начиная с:
- 1.6
- См. также:
intersects
public final boolean intersects(Rectangle2D r)
Shape с внутренней областью указанного Rectangle2D. Метод Shape.intersects() позволяет реализации Shape консервативно возвращать true в следующих случаях: - высока вероятность пересечения
Rectangle2DиShape, но - точное определение этого пересечения требует чрезмерно больших вычислительных затрат.
Shapes этот метод может вернуть true, даже если Rectangle2D не пересекается с Shape. Класс Area выполняет более точные вычисления геометрического пересечения, чем большинство объектов Shape, поэтому его можно использовать, если требуется более точный результат. Этот метод может консервативно возвращать true в случаях, когда указанная прямоугольная область пересекает сегмент пути, но этот сегмент не является границей между внутренней и внешней областями пути. Такая ситуация может возникнуть, если некоторый набор сегментов пути повторно проходится в обратном направлении, в результате чего эти два набора сегментов взаимно компенсируют друг друга, не образуя между собой внутренней области. Определение того, являются ли сегменты действительными границами внутренней области пути, потребовало бы сложных вычислений с учетом всех сегментов пути и правила заполнения, что выходит за рамки данной реализации.
- Определено в:
-
intersectsв интерфейсеShape - Параметры:
-
r— указанныйRectangle2D - Возвращает:
-
true, если внутренняя областьShapeи внутренняя область указанногоRectangle2Dпересекаются либо с высокой вероятностью пересекаются, а вычисление пересечения требует чрезмерно больших затрат; в противном случае —false. - Начиная с:
- 1.6
- См. также:
getPathIterator
public final PathIterator getPathIterator(AffineTransform at, double flatness)
Shape и предоставляет доступ к аппроксимированной геометрии контура Shape. Итератор возвращает только типы точек SEG_MOVETO, SEG_LINETO и SEG_CLOSE.
Если указан необязательный AffineTransform, координаты, возвращаемые при итерации, преобразуются соответствующим образом.
Степень разбиения криволинейных сегментов определяется параметром flatness, который задает максимальное расстояние, на которое любая точка исходной кривой после преобразования может отклоняться от возвращаемых сегментов аппроксимированного пути. Обратите внимание, что ограничение точности аппроксимации пути может быть применено без уведомления, в результате чего очень малые значения параметра аппроксимации будут считаться более крупными. Если такое ограничение существует, оно определяется конкретной используемой реализацией.
Каждый вызов этого метода возвращает новый объект PathIterator, который независимо обходит геометрию объекта Shape, не завися от других одновременно используемых объектов PathIterator.
Рекомендуется, но не гарантируется, чтобы объекты, реализующие интерфейс Shape, изолировали выполняющиеся итерации от изменений исходной геометрии объекта, которые могут произойти во время таких итераций.
Итератор этого класса не является потокобезопасным. Это означает, что класс Path2D не гарантирует, что изменения геометрии объекта Path2D не повлияют на уже выполняющиеся итерации этой геометрии.
- Определено в:
-
getPathIteratorв интерфейсеShape - Параметры:
-
at— необязательныйAffineTransform, применяемый к координатам при их возврате во время итерации, илиnull, если требуются непреобразованные координаты -
flatness— максимальное расстояние, на которое от любой точки исходной кривой могут отклоняться отрезки прямых, используемые для аппроксимации криволинейных сегментов - Возвращает:
- новый
PathIterator, который независимо обходит аппроксимированное представление геометрииShape. - Начиная с:
- 1.6
clone
public abstract Object clone()
- Переопределяет:
-
cloneв классеObject - Возвращает:
- клона этого экземпляра.
- Выбрасывает:
-
OutOfMemoryError— если недостаточно памяти. - Начиная с:
- 1.6
- См. также:
trimToSize
public abstract void trimToSize()
- Начиная с:
- 10
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.