ЗАДАЧА-Программирование разветляющихся

Тема в разделе "C/C++/C#", создана пользователем -, 11 дек 2010.

  1. Гость

    Заданы три точки на плоскости: M с координатами (x1,y1), L с координатами
    (x2,y2) и H с координатами (x3,y3). Определите, лежат ли они на одной
    прямой. При отрицательном ответе найти площадь и периметр треугольника
    MLH.
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Опять же невижу теории по теме....
    Пожалуйста запостите теорию по заданному критерию....
     
  3. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (C++):
    /*
    Заданы три точки на плоскости: M с координатами (x1,y1), L с координатами
    (x2,y2) и H с координатами (x3,y3). Определите, лежат ли они на одной
    прямой. При отрицательном ответе найти площадь и периметр треугольника
    MLH.
    */

    /*
    codeby.net
    Autor: DarkKnight125 (Denis Goncharov)
    */

    #include <iostream>
    using namespace std;

    //Для удобства введем структуры
    struct POINT
    {
    double x; // проектция точки на ось x
    double y; //Проекция точки на ось y
    };

    //Структура прямая y = kx+b
    struct LINE
    {
    double k; //Коэффициент k
    double b; //Коэффициент b
    };

    //Функция получения прямой по двум точкам
    LINE GetLine (POINT A, POINT B)
    {
    LINE Result;
    double c = A.x - B.x;
    Result.k = (B.y - A.y) / -c;
    Result.b = ( -A.x*(B.y - A.y) + A.y*(B.x - A.x))/-c;
    return Result;
    };

    //Функция определения длины отрезка между двумя точкаи
    double GetLenghtLine(POINT A, POINT B)
    {
    return sqrt(pow(A.x - B.x,2) + pow(A.y - B.y,2));
    }


    //Опеределить не пересекает ли прямая треугольник можно узнав находятся ли все точки по одну сторону от прямой
    //Вычислить это можно приведя из уравнения прямой, функцию F(x,y) = kx+b - y;
    //Значение функции может быть положительное - если точка лежит с права от прямой, отрицательное если точка лежит слева от прямой
    //и равное 0, если точка принадлежит прямой
    //В случае с треугольником: если значение функции во всех точка треугольника(вершинах) имеет один знак (+/-), то прямая не пересекает треугольник
    //Иначе прямая пересекает трекугольник

    //Функция определения положения точки относительно прямой
    double Funct (POINT point, LINE line) //point - точка по отношению которой ведется вычисление, line - уравнение прямой
    {
    return (line.k * point.x + line.b - point.y);
    }


    void main(void)
    {
    setlocale(LC_ALL,".1251");
    POINT Arr[3]; //Массив точка (наши 3 точки)
    cout <<"Введите координаты точек" << endl;
    for (int i = 0; i<3; i++)
    {
    cout << "Введите координаты точки №" << i+1 << " (x y): ";
    cin >> Arr[i].x >> Arr[i].y;
    }
    cout << "-----------------------------------------------------" << endl;

    //Теперь проверим лежат ли все точки на одной прямой прямой
    LINE L = GetLine(Arr[0],Arr[1]); //Взяв любые 2 токи определим уравнения прямой
    bool AllOnOneLine = true; //Предположим что все точки лежат на одной прямой
    for (int i = 0; i< 3; i++)
    if ( Funct(Arr[i], L) != 0) //Если хоть одна точка не лежит на прямой, значит наше утверждение - ошибочно
    {
    AllOnOneLine = false;
    break;
    }

    double Pr = 0; //Перимметр треугольника

    if (!AllOnOneLine) //Если точки не лежат на одной прямой, то найдем перимметр и выведим сообщение
    {
    for (int i = 1; i<3; i++)
    Pr += GetLenghtLine(Arr[i-1],Arr[i]);
    cout << "Точки не лежат на одной прямой, периметр треугольника = " << Pr << endl;
    } else cout << "Все точки лежат на одной прямой y = "<<L.k<<"x" << "+ (" <<L.b<<")"<< endl;

    }
     

    Вложения:

    • trio1.jpg
      trio1.jpg
      Размер файла:
      44,2 КБ
      Просмотров:
      10
    • trio2.jpg
      trio2.jpg
      Размер файла:
      38,4 КБ
      Просмотров:
      10
  4. Гость




    :facepalm: СПААААААСИБО БОЛЬШОЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
Загрузка...
Похожие Темы - ЗАДАЧА Программирование разветляющихся
  1. Янчик
    Ответов:
    0
    Просмотров:
    483
  2. TrishaRay
    Ответов:
    1
    Просмотров:
    781
  3. elzim
    Ответов:
    0
    Просмотров:
    929
  4. ShaoKahn
    Ответов:
    1
    Просмотров:
    1.122
  5. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.106

Поделиться этой страницей