Форум программистов, компьютерный форум, киберфорум
Наши страницы

Нахождение площади через координаты треугольника - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Абстрактный класс чисел http://www.cyberforum.ru/cpp-beginners/thread336728.html
Нужно создать абстрактный класс чисел с виртуальными методами - арифметическими операциями. У этого класса 2 наследника - комплексные числа и дроби. Я написал решение этой задачи, но оно мне...
C++ Рекурсия в различных компиляторах Доброго времени суток. Задача: дано целое число n, нужно получить его битовое представление, развернуть его, и то, что получилось перевести обратно в десятичную систему счисления. Пример:n = 4,... http://www.cyberforum.ru/cpp-beginners/thread336725.html
C++ Ввод данных
В общем есть переменная int year; Юзер должен ввести значение переменной, но мне нужно чтобы он мог ввести максимум четырехзначное число, тоесть как бы ограничить количество вводимых символов
Графы C++
Прочитал про обход графа в глубину, посмотрел реализацию, и тут вопрос а как можно использовать этот обход в глубину?
C++ Матрица Изменение http://www.cyberforum.ru/cpp-beginners/thread336665.html
Здравствуйте! Просьба такая: "Приведите пожалуйста пример как можно расширять границы матрицы". Например из матрицы 3х3 сделать матрицу 3х4 и новый столбец добавленный сразуже обнулить. Я думаю что с...
C++ взять адрес переменной если & стоит перед переменной, то это читается как - " взять адрес этой переменной" а если он стоит после ? подробнее

Показать сообщение отдельно
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
28.07.2011, 14:26
ВАРИАНТ 2
Воспользуемся тем свойством, что псевдоскалярное произведение из первого варианта меньше нуля, если тройка точек направлена по часовой стрелке. Проверим это для каждой из сторон, точек противоположных им, а также проверяемой точки. Если точка лежит внутри, то порядок обхода должен совпадать с точкой, противоположной даной стороне. Вышло несколько запутано, вот пример:
Нахождение площади через координаты треугольника
Берем сторону АВ. Точки А, В, С и A, B, D направлены за часовой стрелкой. Такое условие выполняется для каждой из сторон. Значит, точка лежит внутри треугольника.
Теперь точка D лежит снаружи:
Нахождение площади через координаты треугольника
и для стороны ВС даное условие не выполняется:
BСD - против часовой стрелкой, BCА - за часовой.
Такую проверку делает следующий код:
C++
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
#include <iostream>
#include <fstream>
 
struct pt
{
    int x;
    int y;
};
 
bool status(pt X, pt Y, pt is1, pt is2)
{
   int first  = (is1.x - X.x)*(Y.y - X.y) - (Y.x - X.x)*(is1.y - X.y);
   int second = (is2.x - X.x)*(Y.y - X.y) - (Y.x - X.x)*(is2.y - X.y);
   if (first > 0 && second < 0) return 0;
   if (second > 0 && first < 0) return 0;
   return 1;
}
 
int main(int argc, char **argv)
{
    pt a, b, c;
    std::ifstream fin("input.txt");
    fin >> a.x >> a.y
        >> b.x >> b.y
        >> c.x >> c.y;
    int n;
    fin >> n;
    for(int i = 0; i < n; i++)
    {
        pt d;
        fin >> d.x >> d.y;
        if(
            status(a, b, c, d) && status(b, c, a, d) &&
            status(a, c, b, d)
          )
            std::cout << "YES" << std::endl;
        else
            std::cout << "NO"  << std::endl;    
    }
 
   return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru