JavaRush /Java блог /Архив info.javarush /Кухня(); Задание N68
terranum
28 уровень
Milan

Кухня(); Задание N68

Статья из группы Архив info.javarush
Кухня(); Задание N68 - 1 Правила [Одномерные массивы] 68. На плоскости n точек заданы своими координатами и также дана окружность радиуса R с центром в начале координат. Указать множество всех треугольников с вершинами в заданных точках, пересекающихся с окружностью; множество всех треугольников, содержащихся внутри окружности.
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Airon Уровень 34
10 октября 2014
Ну что же, пока никто лучше ничего не предложил, вот вариант в лоб:
public static void solveBD2(PointBD[] points, PointBD c, BigDecimal r) {
    if(points.length < 3)
        throw new IllegalArgumentException("Bad array");
    BigDecimal r2 = r.multiply( r);
    listCrossBD = new LinkedList<PointBD[]>();  //в самом классе private static List<PointBD[]> listCrossBD;
    listInsideBD = new LinkedList<PointBD[]>(); //в самом классе private static List<PointBD[]> listInsideBD;
    for (int i = 0; i < points.length - 2; i++)
        for (int j = i + 1; j < points.length - 1; j++)
            for (int k = j + 1; k < points.length; k++)
                if( points[i].distTo2( c).compareTo(r2) > 0
                 && points[j].distTo2( c).compareTo(r2) > 0
                 && points[k].distTo2( c).compareTo(r2) > 0 )
                    continue;
                else if( points[i].distTo2( c).compareTo(r2) > 0
                      || points[j].distTo2( c).compareTo(r2) > 0
                      || points[k].distTo2( c).compareTo(r2) > 0 )
                    listCrossBD.add(new PointBD[]{points[i], points[j], points[k]});
                else
                    listInsideBD.add(new PointBD[]{points[i], points[j], points[k]});
}

class PointBD {
    private BigDecimal x;
    private BigDecimal y;

    PointBD(BigDecimal x, BigDecimal y) {
        this.x = x;
        this.y = y;
    }

    public BigDecimal distTo2(PointBD p) {
        return this.x.subtract(p.x).multiply(this.x.subtract(p.x)).add(this.y.subtract(p.y).multiply(this.y.subtract(p.y))).setScale(10, BigDecimal.ROUND_HALF_UP);
    }

    @Override
    public String toString() {
        return String.format("{%.3f, %.3f}", x, y);
    }
}