Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 24.11.2013
Сообщений: 51

Выяснить, находится ли точка с заданными координатами внутри треугольника

28.04.2016, 10:31. Показов 720. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача такая: необходимо выяснить находится ли точка О с координатами x,y внутри треугольника ABC (А(x1,y1), B(x2,y2), C(x3,y3)). При решении задачи воспользоваться формулой Герона. Также нужно не забыть проверить этот треугольник на его существование (т.е. сумма любых двух сторон больше третей).
Точка находится внутри треугольника в том случае, если сумма площадей трех внутренних треугольников равна площади всего треугольника.

Помогите найти ошибку. Я ввожу координаты точек, и не получаю никакого сообщения.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
    if($_SERVER["REQUEST_METHOD"] == "GET")
$x = trim(strip_tags($_GET['x']));
$y = trim(strip_tags($_GET['y']));
$x1 = trim(strip_tags($_GET['x1']));
$y1 = trim(strip_tags($_GET['y1']));
$x2 = trim(strip_tags($_GET['x2']));
$y2 = trim(strip_tags($_GET['y2']));
$x3 = trim(strip_tags($_GET['x3']));
$y3 = trim(strip_tags($_GET['y3']));
?>
<form action="<?= $_SERVER['PHP_SELF']?>" method="GET">
координаты т. О (x,y): <input type="number" name="x"/> <input type="number" name="y"/> <BR>
координаты т. А (x,y): <input type="number" name="x1"/> <input type="number" name="y1"/> <BR>
координаты т. B (x,y): <input type="number" name="x2"/> <input type="number" name="y3"/> <BR>
координаты т. C (x,y): <input type="number" name="x3"/> <input type="number" name="y3"/> <BR>
<BR>
             <input type="submit" />    
</form>
<?php
$a=sqrt((($x1-$x2)*($x1-$x2))+(($y1-$y2)*($y1-$y2)));
$b=sqrt((($x2-$x3)*($x2-$x3))+(($y2-$y3)*($y2-$y3)));
$c=sqrt((($x3-$x1)*($x3-$x1))+(($y3-$y1)*($y3-$y1)));
 
$ao=sqrt((($x1-$x)*($x1-$x))+(($y1-$y)*($y1-$y))); $bo=sqrt((($x2-$x)*($x2-$x))+(($y2-$y)*($y2-$y)));$co=sqrt((($x-$x3)*($x-$x3))+(($y-$y3)*($y-$y3))); 
 
$p=(($a+$b+$c)/2);
$s=sqrt($p*($p-$a)*($p-$b)*($p-$c));
$p1=(($ao+$co+$c)/2);
$s1=sqrt($p*($p-$ao)*($p-$co)*($p-$c));
$p2=(($ao+$bo+$a)/2);
$s2=sqrt($p*($p-$ao)*($p-$bo)*($p-$a));
$p3=(($bo+$co+$b)/2);
$s3=sqrt($p*($p-$bo)*($p-$co)*($p-$c=b));
 
if ($x && $y && $x1 && $y1 && $x2 && $y2 && $x3 && $y3) {
if (($a<0) or ($b<0) or ($c<0)) {
echo "Не может быть отрицательных сторон!";
                        }
elseif (($a+$b<=$c) or ($b+$c<=$a) or ($a+$c<=$b)) {
echo "У треугольника не может быть таких размеров!";
                                    }
elseif ($s1+$s2+$s3==$s){
echo "Точка лежит внутри треугольника!";
                }
else {
echo "Точка не лежит внутри треугольника!";
}
 }
else
echo "Заполните все поля!";
?>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2016, 10:31
Ответы с готовыми решениями:

Как определить находится ли координата внутри массива координат
Здравствуйте. Есть вот такой массив: $mkad = array( &quot;55.78000432402266,37.84172564285271&quot;,...

Определить, в какую из областей - 1 или 2 - попадает точка с заданными координатами
Определить, в какую из областей - 1 или 2 - попадает точка с заданными координатами. Для простоты принять, что точка не пропадает на...

Определить находится ли данная координата на карте в России
Не получается сделать проверку. Не понимаю что не так.. Делаю через geoPHP, но не работает. Выдает: Координаты находятся за...

1
67 / 60 / 25
Регистрация: 05.05.2009
Сообщений: 131
28.04.2016, 20:12
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
//  Ожидаемые GET поля
$points = array(
    'x' => '',
    'y' => '',
    'x1' => '',
    'y1' => '',
    'x2' => '',
    'y2' => '',
    'x3' => '',
    'y3' => ''
);
 
if(isset($_GET['check']))
{
    $message = '';
    
    foreach ($points as $field => $value)
    {
        if (array_key_exists($field, $_GET))
        {
            $points[$field] = preg_replace('#(\D+)#', '', $_GET[$field]);
            $points[$field] = (float)str_replace(',', '.', $points[$field]);
        }
        else
        {
            $message = 'Заполните все поля!';
        }
    }
 
    if (!strlen($message))
    {
        //  Длины сторон основного треугольника
        $a = sqrt(pow($points['x1'] - $points['x2'], 2) + pow($points['y1'] - $points['y2'], 2));
        $b = sqrt(pow($points['x2'] - $points['x3'], 2) + pow($points['y2'] - $points['y3'], 2));
        $c = sqrt(pow($points['x3'] - $points['x1'], 2) + pow($points['y3'] - $points['y1'], 2));
 
        //  Длины сторон треугольников с вершинами в точке О 
        $ao = sqrt(pow($points['x1'] - $points['x'], 2) + pow($points['y1'] - $points['y'], 2));
        $bo = sqrt(pow($points['x2'] - $points['x'], 2) + pow($points['y2'] - $points['y'], 2));
        $co = sqrt(pow($points['x'] - $points['x3'], 2) + pow($points['y'] - $points['y3'], 2));
 
        //  Площадь основного треугольника
        $p = ($a + $b + $c) / 2;
        $s = (float)sqrt($p * ($p - $a) * ($p - $b) * ($p - $c));
        
        //  Площади треугольников с вершинами в точке О
        $p1 = ($ao + $co + $c) / 2;
        $s1 = (float)sqrt($p1 * ($p1 - $ao) * ($p1 - $co) * ($p1 - $c));
        $p2 = ($ao + $bo + $a) / 2;
        $s2 = (float)sqrt($p2 * ($p2 - $ao) * ($p2 - $bo) * ($p2 - $a));
        $p3 = ($bo + $co + $b) / 2;
        $s3 = (float)sqrt($p3 * ($p3 - $bo) * ($p3 - $co) * ($p3 - $b));
 
        //  Вычисления площадей может быть не достаточно точным для точного равенства,
        //  потому нужно сравнивать эти площади с определённой допустимой погрешностью, например 0.001
        if (abs($s1 + $s2 + $s3 - $s) < 0.001)
        {
            $message = "Точка лежит внутри треугольника!";
        }
        else
        {
            $message = "Точка не лежит внутри треугольника (" . ($s1 + $s2 + $s3) . " != " . $s . ")";
        }
    }
 
    echo '<p style="color:#A00">'.$message.'</p>';
}
?>
<form action="" method="GET">
    <p>
        координаты т. О (x,y):
        <input type="number" name="x" value="<?=$points['x']?>" />
        <input type="number" name="y" value="<?=$points['y']?>" />
    </p>
    <p>
        координаты т. А (x,y):
        <input type="number" name="x1" value="<?=$points['x1']?>" />
        <input type="number" name="y1" value="<?=$points['y1']?>" />
    </p>
    <p>
        координаты т. B (x,y):
        <input type="number" name="x2" value="<?=$points['x2']?>" />
        <input type="number" name="y2" value="<?=$points['y2']?>" />
    </p>
    <p>
        координаты т. C (x,y):
        <input type="number" name="x3" value="<?=$points['x3']?>" />
        <input type="number" name="y3" value="<?=$points['y3']?>" />
    </p>
    <br />
    <input type="submit" name="check" value="Проверить" />
</form>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2016, 20:12
Помогаю со студенческими работами здесь

Выяснить, можно ли прямоугольник со сторонами a и b уместить внутри прямоугольника со сторонами c и d
Доброго времени суток. Задали в колледже написать PHP-скрипты (25 заданий). Но кое какие я сделать не могу. Задачи легкие (так как только...

Почему при использовании цикла, переменная которая находится внутри него не сохраняет значение при его завершении?
Почему при использовании цикла, переменная которая находится внутри него не сохраняет значение при его завершении.Пример: ...

Как вставить переменные php во внутрь js который находится в echo
Подскажите, возможно ли вставить переменные php во внутрь function click_and_go($_id, $_url){ echo &quot;&lt;script...

Регулярное выражение для всего, что находится внутри цикла for
Выведите все операторы внутри циклов for Какое должно быть регулярное выражение для этого? Для примера в данном коде: procedure...

По координатам трех вершин некоторого треугольника найти его площадь и периметр
Задача: По координатам трех вершин некоторого треугольника найти его площадь и периметр. Я не могу понять как реализовать. Код на ввод...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru