Создайте список всех точек пересечения прямоугольника с заданной линией - PullRequest
0 голосов
/ 05 мая 2020

Итак, у меня есть готовая рабочая функция, которая находит точки пересечения, а также класс прямоугольника. Я хочу создать список всех этих пунктов.

Вы можете мне посоветовать, как это сделать? Спасибо.

public class Rectangle {

private double width;
private double height;
private Point upperLeft;

// Create a new rectangle with location and width/height.
public Rectangle(Point upperLeft, double width, double height){
    this.upperLeft = upperLeft;
    this.width = width;
    this.height = height
}

// Return a (possibly empty) List of intersection points
// with the specified line.
public java.util.List<Point> intersectionPoints(Line line){
    //**I don't know
}

}

Я думал о чем-то вроде создания 2-х массивов из 4.

Line[] rectLines = new Line[4];
    Point[] IntersectionPoints = new Point[4];

, затем создайте 4 строки на основе углов прямоугольника и добавьте их в массив.

rectLines[0] = new Line(rect.getUpperLeft().getX(), rect.getUpperLeft().getY(), rect.getWidth(), rect.getUpperLeft().getY());
    rectLines[1] = new Line(rect.getUpperLeft().getX(), rect.getUpperLeft().getY(), rect.getUpperLeft().getX(), rect.getHeight());
    rectLines[2] = new Line(rect.getUpperLeft().getX(), rect.getHeight(), rect.getWidth(), rect.getHeight());
    rectLines[3] = new Line(rect.getWidth(), rect.getUpperLeft().getY(), rect.getWidth(), rect.getHeight());

затем запустите al oop, который добавляет, который использует мою функцию поиска пересечений, находит точки и добавляет их в массив точек.

for (int i=0; i<4; i++) {
        if (intersectionWith(rectLines[i]) != null)
            IntersectionPoints[i] = intersectionWith(rectLines[i]);}

Функция « crossctionWith » возвращает NULL, если точки пересечения нет, ad возвращает точку, если точка есть.

Но что теперь? Как мне составить список? Как вы думаете, разумно определить размер массива точек равным 4, хотя я действительно не знаю, будет ли он 0,1,2,3 или 4? И что тогда будет с неиспользуемыми слотами в массиве?

ps что будет, если линия пройдет через угол? это означает, что у него будет 2 точки пересечения, потому что он будет пересекаться с 2 сторонами прямоугольника.

Спасибо.

...