кодесурса
«PHP

Упражнения по PHP: вычисление площади многоугольника

script1adsense2code
script1adsense3code

PHP: упражнение 73 с решением

Выпуклый многоугольник - это простой многоугольник, в котором ни один отрезок прямой между двумя точками на границе никогда не выходит за пределы многоугольника. Эквивалентно, это простой многоугольник, внутренняя часть которого является выпуклым множеством. В выпуклом многоугольнике все внутренние углы меньше или равны 180 градусам, в то время как в строго выпуклом многоугольнике все внутренние углы строго меньше 180 градусов.
Напишите программу PHP, которая вычисляет площадь многоугольника. Вершины имеют имена вершина 1, вершина 2, вершина 3, ... вершина n в соответствии с порядком соединения ребер. Однако n равно 3 или более и 20 или менее. Вы также можете использовать следующую формулу для вычисления площади S по длинам a, b и c трех сторон треугольника.

Ввод: вводится несколько строк символов. Одна строка дается на строку

«PHP:

Иллюстрированная презентация:

«PHP:

Входные данные :
Ввод дается в следующем формате.
х1, у1
х2, у2
:
xn, yn
xi, yi - действительные числа, представляющие координаты x и y вершины i соответственно.

Пример решения: -

PHP-код:

<?php
calc();
 
function calc() {
    $points = array();
    while ($line = trim(fgets(STDIN))) {
        list($x, $y) = explode(',', $line);
        $points[] = new Point($x, $y);
    }
    $sum = 0;
    $o = $points[0];
    for ($i = 1; $i < count($points) - 1; $i++) {
        $p1 = $points[$i];
        $p2 = $points[$i+1];
 
        $T = new Triangle($o, $p1, $p2);
        $sum += $T->getArea();
    }
    echo "Area of the polygon:\n";
    echo $sum . "\n";
}
 
class Triangle {
    public $A, $B, $C;
    public $a, $b, $c;
 
    public function __construct(Point $A, Point $B, Point $C) {
        $this->A = $A;
        $this->B = $B;
        $this->C = $C;
 
        $this->a = $B->distanceFrom($C);
        $this->b = $C->distanceFrom($A);
        $this->c = $A->distanceFrom($B);
    }
 
    public function getArea() {
        $z = ($this->a + $this->b + $this->c) / 2;
        return sqrt($z * ($z - $this->a) * ($z - $this->b) * ($z - $this->c));
    }
}
 
class Point {
    public $x, $y;
 
    public function __construct($x, $y) {
        $this->x = $x;
        $this->y = $y;
    }
 
    public function distanceFrom(Point $p) {
        $dx = $this->x - $p->x;
        $dy = $this->y - $p->y;
        return sqrt($dx * $dx + $dy * $dy);
    }
}
?>

Пример ввода:
1,0, 0,0
0,0, 0,0
1,0, 1,0
2.0, 0.0
-1,0, 1,0

Пример вывода:

 Площадь многоугольника:
1,5 

Блок - схема:

«Блок-схема:

Редактор кода PHP:

Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.

Предыдущий: Напишите программу PHP для восстановления исходной строки, введя сжатую строку с этим правилом.
Далее: Напишите программу PHP, чтобы вырезать слова длиной от 3 до 6 символов из данного предложения не более 1024 символов.

Каков уровень сложности этого упражнения?

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code