Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.05.2016, 15:25
Аватар для marggooo1812
Новичок на форуме
Отправить личное сообщение для marggooo1812 Посмотреть профиль Найти все сообщения от marggooo1812
 
Регистрация: 29.05.2016
Сообщений: 1

Помогите пожалуйста!!!!!
Мне надо написать программку,которая должна посчитать периметр и площадь треугольника имея только координаты трех точек (исходный массив),но при этом надо что бы было не только три точки может быть и больше,при этом должны перебираться все варианты,всех возможных треугольников,в конце должны появится два массива один с периметрами,второй с площадями,я просто в javaskrip
Ответить с цитированием
  #2 (permalink)  
Старый 29.05.2016, 21:38
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Вы написали в раздел работа, так что укажите цену за эту работу.
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2016, 16:52
Аватар для DynkanMaclaud
Профессор
Отправить личное сообщение для DynkanMaclaud Посмотреть профиль Найти все сообщения от DynkanMaclaud
 
Регистрация: 08.08.2014
Сообщений: 261

Rise,
+))
Ответить с цитированием
  #4 (permalink)  
Старый 31.05.2016, 01:15
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

marggooo1812, не берусь гарантировать, что код правильно работает на всех целых числах, ибо тестил только примитивные варианты.
Ну вы же не обозначили цену, т.ч. должны быть довольно говнокодом


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>ГГ</title>
    <style>

    </style>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
  </head>
  <body>
    <label>x: </label>
    <input type="text" id="x">
    <label>y: </label>
    <input type="text" id="y">
    <input type="button" id="add" value="Добавить">
    <input type="button" id="clear" value="Очистить" style="display:block; margin:20px;">
    <input type="button" id="calc" value="Посчитать" style="display:block; margin:20px;">
    <textarea id="output" rows="8" cols="40" style="display:block; margin:20px;">Периметры: | Площади:</textarea>
    <script>
var add = document.querySelector('#add'),
 clear = document.querySelector('#clear'),
 calc = document.querySelector('#calc')
 textarea = document.querySelector('textarea'),
 x = document.getElementById('x'),
 y = document.getElementById('y'),
 points = [];

 function isInteger(num) {
   return (num ^ 0) === num;
 }

 function square(x){
    return x*x;
 }

add.onclick = function(){
  if (isInteger(+x.value) && isInteger(+y.value)) {
    points.push({
    'x': x.value,
    'y': y.value
    });
    x.value = "";
    y.value = "";
    console.log(points);
  }

  else {
    alert('Введите обе координаты в виде целых чисел');
  }

}

clear.onclick = function(){
  points.length = 0;
  textarea.innerHTML = "Периметры: | Площади:";
}

calc.onclick = function(){
  if (points.length < 3)
    alert("Слишком мало точек чтобы образовать треугольник");
  var p,s,l1,l2,l3;
  for (var i = 0; i < points.length; i++) {
    for (var j = 0; j < i; j++) {
      for (var k = 0; k < j; k++) {
        if ((points[i]["x"] - points[k]["x"]) *
           (points[j]["y"] - points[k]["y"]) -
           (points[j]["x"] - points[k]["x"]) *
           (points[i]["y"] - points[k]["y"]) == 0) continue;
        
        l1 = Math.sqrt(square(points[j]["x"] - points[i]["x"]) + square(points[j]["y"] - points[i]["y"]));
        l2 = Math.sqrt(square(points[k]["x"] - points[i]["x"]) + square(points[k]["y"] - points[i]["y"]));
        l3 = Math.sqrt(square(points[j]["x"] - points[k]["x"]) + square(points[j]["y"] - points[k]["y"]));
        console.log(l1);
        p = l1 + l2 + l3;

        console.log(p);
        ss = p/2 * (p/2 - l1) * (p/2 - l2) * (p/2 - l3);
        console.log(ss);
        s = Math.sqrt(ss);
        p = p.toFixed(2);
        s = s.toFixed(2);
        console.log(s);
        textarea.innerHTML += "\r\n" + p.toString() + "          |    " + s.toString();
      }
    }
  }
}
</script>
    
  </body>
</html>

Последний раз редактировалось EmperioAf, 31.05.2016 в 20:02.
Ответить с цитированием
  #5 (permalink)  
Старый 31.05.2016, 17:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от Rise
EmperioAf, надо еще на треугольник проверять, что из трех точек нет одинаковых и не лежат на одной прямой.
а зачем? если нужно можно отсеять результат по Периметр == 0 или Площадь == 0
Ответить с цитированием
  #6 (permalink)  
Старый 31.05.2016, 18:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от Rise
чтобы не производить каждый раз весь цикл вычислений.
а вам не трудно добавить нужный код в строку 66? мучают сомнения что проще всётаки проверить результат, чем исходные данные на принадлежность прямой.
Ответить с цитированием
  #7 (permalink)  
Старый 31.05.2016, 18:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Rise,
спасибо, осталось с одинаковыми точками разобратся
Ответить с цитированием
  #8 (permalink)  
Старый 31.05.2016, 20:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Rise,
Ответить с цитированием
  #9 (permalink)  
Старый 31.05.2016, 20:06
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Сообщение от Rise Посмотреть сообщение
рони, наверное лучше без деления обойтись, а то неточные вычисления могут получиться при сравнении.
if ((points[i]["x"] - points[k]["x"]) * 
	(points[j]["y"] - points[k]["y"]) - 
	(points[j]["x"] - points[k]["x"]) * 
	(points[i]["y"] - points[k]["y"]) == 0) continue;
Спасибо! Добавил в код.
Я вообще думал добавить проверку на точки на одной прямой, но вспомнил, что в школе нам говорили что 3 точки на одной прямой тоже образуют треугольник; но у него один угол равен 180 градусов, а остальные два по нулям.
Ответить с цитированием
  #10 (permalink)  
Старый 01.06.2016, 17:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Rise,
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой нужен скрипт, чтобы переключение серии работало? Помогите пожалуйста! Andreiom Events/DOM/Window 1 27.08.2015 07:30
Помогите пожалуйста с автозаполнением lightburst Ваши сайты и скрипты 2 10.06.2015 17:36
Слайдер - карусель блоков (помогите пожалуйста) Viktor.Poberezhniy Общие вопросы Javascript 3 22.07.2014 12:46
Помогите пожалуйста вычислить общую сумму katalizator Общие вопросы Javascript 15 22.03.2013 16:26
Помогите пожалуйста правильно написать скрипт raffx Events/DOM/Window 17 16.10.2012 20:31