[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача на вычисление высоты в треугольнике
Страницы: 1, 2
АнюткаКузнечик
Вычислить высоту треугольника, зная координаты его вершин.
Как в php написать такой код для решения этой задачи?
sergeiss
Цитата (АнюткаКузнечик @ 15.11.2016 - 21:36)
Как в php написать такой код для решения этой задачи?

Также, как и на другом языке smile.gif Пишешь алгоритм и переводишь его на используемый язык программирования. Или есть другие мнения по этому поводу?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
AllesKlar
Цитата (АнюткаКузнечик @ 15.11.2016 - 19:36)
Вычислить высоту треугольника, зная координаты его вершин.
Как в php написать такой код для решения этой задачи?

Это обычная сумма двух векторов, если мне не отшибает память.
На php будет примерно так:

$p1 = new Point($a1, $a2);
$p2 = new Point($b1, $a2);
$p3 = new Point($b1, $a1);

$v1 = new Vector($p1, $p2);
$v2 = new Vector($p1, $p3);

$triangle = Vector::getSum($v1, $v2);


_____________
[продано копирайтерам]
Ron
Цитата (sergeiss @ 15.11.2016 - 21:51)
Пишешь алгоритм и переводишь его на используемый язык программирования. Или есть другие мнения по этому поводу?

Да тут нет никакого алгоритма, вот что достадно! ;)

Короче таких классов в PHP я никогда в жизни не видел, и гугол о них не знает, особенно про Point. Может быть и есть какие-то хитрые решения, но судя по постановке задачи она тянет на школу, класс так 8 или 9.

По координатам можно найти длины всех сторон по формуле. Далее находим углы, тоже по формуле, через известные стороны. Высота проведенная из большего угла лежит внутри треугольника. Поэтому решение:


<?php

$a = [0, 0]; //x, y
$b = [2, 4];
$c = [-3, 2];

$ab = sqrt(pow($b[0]-$a[0], 2) + pow($b[1]-$a[1], 2));
$ac = sqrt(pow($c[0]-$a[0], 2) + pow($c[1]-$a[1], 2));
$bc = sqrt(pow($c[0]-$b[0], 2) + pow($c[1]-$b[1], 2));

$angles = []; //Массив со значениями углов вершин, в радианах.

//Косинус искомого угла.

$alpha = (pow($ab, 2) + pow($ac, 2) - pow($bc, 2))/(2*$ab*$ac);
$angles['a'] = acos($alpha);

$betta = (pow($ab, 2) + pow($bc, 2) - pow($ac, 2))/(2*$ab*$bc);
$angles['b'] = acos($betta);

$gamma = (pow($ac, 2) + pow($bc, 2) - pow($ab, 2))/(2*$bc*$ac);
$angles['c'] = acos($gamma);

arsort($angles);
reset($angles);
$first_key = key($angles);

switch ($first_key) {
case 'a':
echo $ac * sin($angles['c']);
//echo $ab * sin($angles['b']);
break;
case 'b':
echo $ab * sin($angles['a']);
//echo $bc * sin($angles['с']);
break;
case 'c':
echo $ac * sin($angles['a']);
//echo $bc * sin($angles['b']);
break;
}


Вычисления идут в радианах. Закомментированные строки то же самое, только через другую сторону и угол. Используется определение синуса острого угла для прямоугольного треугольника.

Всё. Задача чисто математическая, в ней алгоритмики НОЛЬ!

ТС, учти, задавать чисто математические задачи программистам довольно непрактично. Мы мастера логических задач и искусства декомпозиции.

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.