Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Java] Класс-многоугольник


Автор: Nusja 5.12.2006, 20:43
реализовать класс многоугольников,вписанных в окружность единичного радиуса,с методами вычисления периметра и площади


Автор: LSD 5.12.2006, 22:28
Произвольных многоугольников? Или все же выпуклых?

Автор: Nusja 6.12.2006, 02:03
произвольных

Автор: LSD 7.12.2006, 19:29
И ты знаешь формулу вычисления площади произвольного вписанного многоугольника?

Автор: Nusja 7.12.2006, 22:03
НЕТ,ЗНАЧИТ ДЛЯ ВЫПУКЛЫХ, Я ВООБЩЕ НЕ ПОНИМАЮ ЭТОГО ЗАДАНИЯ

Автор: LSD 7.12.2006, 23:01
1. Не надо кричать!

2. Если ты не понимашь задание, то кто вообще должен его понимать? Мне его что-ли задавали.

Для выпуклых многоугольников код будет выглядеть так:
Код
import static java.lang.Math.sqrt;

public class Polygon
{
  public static final double RADIUS = 1.0;

  private double[] sides;
  private double area = Double.NaN;
  private double perimeter = Double.NaN;

  public Polygon(double[] sides)
  {
    if(sides.length <= 2)
      throw new IllegalArgumentException();

    for(double side : sides)
      if(!(side > 0))
        throw new IllegalArgumentException();

    this.sides = sides;
  }

  public double getArea()
  {
    if(Double.isNaN(area))
    {
      area = 0;
      for(double side : sides)
      {
        double p = (side + 2.0) / 2.0;
        area += sqrt(p * (p - RADIUS) * (p - RADIUS) * (p - side));
      }
    }
    return area;
  }

  public double getPerimeter()
  {
    if(Double.isNaN(perimeter))
    {
      perimeter = 0;
      for(double side : sides)
        perimeter += side;
    }
    return perimeter;
  }
}

Автор: Nusja 8.12.2006, 22:30
1.Я не кричу,это Caps Lock!!!
2.огромное спасибо!!! у нас странная преподша, она сама плохо разбирается в заданиях,так что сорру

Автор: LSD 10.12.2006, 15:05
Цитата(Nusja @  8.12.2006,  22:30 Найти цитируемый пост)
Я не кричу,это Caps Lock!!!

Когда ты пишешь заглаными буквами, это считается криком. Равно как и куча восклицательных знаков.

Цитата(Nusja @  8.12.2006,  22:30 Найти цитируемый пост)
 у нас странная преподша, она сама плохо разбирается в заданиях,так что сорру

Я не могу у нее уточнить задание, а ты можешь smile 

Автор: VectorMan 10.12.2006, 16:18
Цитата(LSD @ 7.12.2006,  19:29)
И ты знаешь формулу вычисления площади произвольного вписанного многоугольника?

вроде такая формула  smile 
только необходимо, чтобы не было самопересечений

Автор: LSD 11.12.2006, 01:12
Цитата(VectorMan @  10.12.2006,  16:18 Найти цитируемый пост)
вроде такая формула

X и Y - это координаты вершин?

Автор: VectorMan 11.12.2006, 07:26
Да, причём Xn+1 = X0, Yn+1 = Y0

Автор: LSD 11.12.2006, 12:13
1. В моем первом варианте была ошибка, я ее исправил.
2. Во код с этой формулой (за правильность формулы я не ручаюсь)
Код
import static java.lang.Math.sqrt;

public class Polygon
{
  public static final double RADIUS = 1.0;

  private double[] x;
  private double[] y;
  private double area = Double.NaN;
  private double perimeter = Double.NaN;

  public Polygon(double[] x, double[] y)
  {
    if(x.length != y.length || x.length <= 2)
      throw new IllegalArgumentException();

    this.x = new double[x.length + 1];
    System.arraycopy(x, 0, this.x, 0, x.length);
    this.x[x.length] = x[0];

    this.y = new double[y.length + 1];
    System.arraycopy(y, 0, this.y, 0, y.length);
    this.y[y.length] = y[0];
  }

  public double getArea()
  {
    if(Double.isNaN(area))
    {
      area = 0;
      for(int i = 1; i < x.length; i++)
        area = (x[i - 1] - x[i]) * (y[i - 1] - y[i]);
      area /= 2.0;
    }
    return area;
  }

  public double getPerimeter()
  {
    if(Double.isNaN(perimeter))
    {
      perimeter = 0;
      for(int i = 1; i < x.length; i++)
        perimeter += sqrt((x[i - 1] - x[i]) * (x[i - 1] - x[i]) + (y[i - 1] - y[i]) * (y[i - 1] - y[i]));
    }
    return perimeter;
  }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)