Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/137: Рейтинг темы: голосов - 137, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 15.09.2010
Сообщений: 45
1

Точка в треугольнике

29.12.2010, 18:24. Показов 26409. Ответов 34
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите!
даны три вершины треугольника с координатами(коорд вводятся с клавиатуры) А(х1,y1) B(х2,y2) и С(х3,y3). И вводятся координаты другой точки Д(х4,y4)-и нужно определить принадлежит эта точка треугольнику или нет!А перед этим еще проверить возможен ли треугольник с такими точками.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2010, 18:24
Ответы с готовыми решениями:

Определить, находится ли точка в треугольнике
заданы прямоугольные координаты Х1,У1,Х2,У2,Х3,У3 вершин треугольника и координаты Х и У точки....

Лежит ли точка в круге и треугольнике
Даны круг и треугольник на плоскости.Кординаты вводятся с клавиатуры.Даны кординаты точки. Узнать...

Определить и напечатать, находится ли точка в треугольнике
добрый вечер. помогите пожалуйста решить задачи срочно нужно( 1. Треугольник и точка. Заданы...

Треугольник в треугольнике
Даны действительный числа x1,y1,x2,y2,...,x6,y6. Точки с координатами (x1,y1), (x2,y2), (x3,y3)...

34
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
29.12.2010, 19:39 2
Цитата Сообщение от Непрограммистка Посмотреть сообщение
даны три вершины треугольника с координатами(коорд вводятся с клавиатуры) А(х1,y1) B(х2,y2) и С(х3,y3). И вводятся координаты другой точки Д(х4,y4)-и нужно определить принадлежит эта точка треугольнику или нет!А перед этим еще проверить возможен ли треугольник с такими точками.
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
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
 
struct point
{
    double x;
    double y;
};
 
bool foo(point p[])
{
    int a = (p[1].x - p[0].x) * (p[2].y - p[1].y) * (p[1].y - p[0].y),
    b = (p[2].x - p[0].x) * (p[3].y - p[2].y) * (p[2].y - p[0].y),
    c = (p[3].x - p[0].x) * (p[1].y - p[2].y) * (p[3].y - p[0].y);
 
    return (a >= 0 && b >= 0 && c >= 0) ||
                (a <= 0 && b <= 0 && c <= 0)? 1 : 0;
}
 
bool prov(point p[])
{
    return p[1].x == p[2].x && p[2].x == p[3].x? 0 :
                p[1].y == p[2].y && p[2].y == p[3].y? 0 : 1;
}
 
int main()
{
    const size_t n = 4;
    point p[n];
 
    std::cout << "\n\nEnter coord point: ";
    for(size_t i = 0; i < n; ++i)
    {
        if(i > 0)
            std::cout << "\n\nEnter tringale coord " << i << ": ";
 
        std::cout << "\n\nx" << i << " -> ";
        std::cin >> p[i].x;
        std::cout << "\n\ny" << i << " -> ";
        std::cin >> p[i].y;
    }
 
    if(prov(p))
    {
        if(foo(p))
           std::cout << "\n\tYes" << std::endl;
 
        else
           std::cout << "\n\tNo" << std::endl;
    }
 
    else
        std::cout << "\n\tTringale not found" << std::endl;
 
    return 0;
}
0
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
29.12.2010, 20:41 3
asics, как у вас работает проверка на возможность существования треугольника с задаными координатами?
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
29.12.2010, 20:46 4
Mayonez, Если точки находятся на одной линии, то соответственно нельзя построить данный треугольник, а что что-то не так ?
0
131 / 108 / 12
Регистрация: 04.12.2010
Сообщений: 313
29.12.2010, 20:47 5
А как он может не существовать? 3 точки всегда преобразуют одну плоскость. Следовательно, и треугольник. Единственный вариант - координаты точек совпадут...
Да, или на одной прямой. Это можно по одной формуле (расположение то4ки относительно прямой) вычеслить...
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
29.12.2010, 20:55 6
Цитата Сообщение от Алексaндр Посмотреть сообщение
3 точки всегда преобразуют одну плоскость.
Ошыбаетесь, три точки которые не лежат на одной прямой всегда преобразуют одну и только одну плосткость.Это вытекает из аксиомы стереометрии, точно уже не помню какой именно.
0
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
29.12.2010, 21:01 7
Цитата Сообщение от asics Посмотреть сообщение
а что что-то не так ?
ну, например, для координат треугольника 0 0, 2 2, 3 3
проверка дает +

Добавлено через 2 минуты
а как проверяется приналежность точки треугольнику? Через площадь???
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
29.12.2010, 21:07 8
Mayonez, По этому алгоритму.

Добавлено через 3 минуты
Цитата Сообщение от Mayonez Посмотреть сообщение
ну, например, для координат треугольника 0 0, 2 2, 3 3
проверка дает +
Ов, пардон, не доглидел.
0
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
29.12.2010, 21:16 9
Ввод:
0.346
0.236

-0.474
-0.568

0.567
2.346

2.437
-0.2

выдает NO
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
29.12.2010, 21:29 10
Mayonez, А если так ?
C++
1
2
3
4
5
6
7
8
9
bool foo(point p[])
{
    int a = (p[1].x - p[0].x) * (p[2].y - p[1].y) - (p[2].x - p[1].x) * (p[1].y - p[0].y),
    b = (p[2].x - p[0].x) * (p[3].y - p[2].y) - (p[3].x - p[2].x) * (p[2].y - p[0].y),
    c = (p[3].x - p[0].x) * (p[1].y - p[3].y) - (p[1].x - p[3].x) * (p[3].y - p[0].y);
 
    return (a >= 0 && b >= 0 && c >= 0) ||
                (a <= 0 && b <= 0 && c <= 0)? 1 : 0;
}
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
29.12.2010, 21:45 11
Проще через площади посчитать ИМХО...
0
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
29.12.2010, 21:46 12
Чтобы проверить, можно ли образовать с заданых точек треугольник, нужно найти длину всех сторон и воспользоватся тем, что сумма двух любых сторон не должна превышать третью
0
4654 / 3406 / 361
Регистрация: 11.11.2010
Сообщений: 6,205
Записей в блоге: 2
29.12.2010, 21:50 13
Допустим имеется треугольник ABC, находим его площадь по трем вершинам, далее, чтобы определить попадает ли точка в заданную область находим площади треугольников: DAB, DBC, DAC; если Sabc=Sdab+Sdbc+Sdac тогда точка принадлежит.
2
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
29.12.2010, 21:53 14
Цитата Сообщение от silent_1991 Посмотреть сообщение
Проще через площади посчитать ИМХО...
Можно и через площади, но тогда нужно, чтобы координаты были целыми числами, тогда площадь - полуцелое число. Тогда можна сравнить удвоенные величины площадей (найденых через псевдоскалярное произведение)
0
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
29.12.2010, 21:57 15
Если координаты - целые числа:
Точка в треугольнике

Находим площадь ABC. Если она равна площади ABD+BCD+ADC значит точка лежит внутри треугольника.
В противном случае площадь ABC будет меньше второй суммы
найти площадь таким образом:
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
#include <iostream>
#include <cmath>
using namespace std;
 
struct point
{
   int x;
   int y;
};
 
int area(point a, point b, point c)
{
   return abs((a.x - c.x)*(b.y - c.y) + (b.x-c.x)*(c.y-a.y));
}
 
int main()
{
   /////////////////////////////////////////////////////////////////////////////
   point a, b, c, d;
   cin >> a.x >> a.y;
   cin >> b.x >> b.y;
   cin >> c.x >> c.y;
   cin >> d.x >> d.y;
   /////////////////////////////////////////////////////////////////////////////
   if (area(a, b, c) == area(a, b, d) + area(a, d, c) + area(b, d, c))
      cout << "In\n";
   else 
      cout << "Out\n";
   /////////////////////////////////////////////////////////////////////////////
   return 0;
}
1
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
29.12.2010, 21:57 16
Mayonez, а что, нынче с дробными числами работать не удаётся? Аппаратные трудности? Или над их полем умножение не определили?
0
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
29.12.2010, 22:01 17
Цитата Сообщение от silent_1991 Посмотреть сообщение
Аппаратные трудности?
скорее програмные
допустим, площадь треугольника 15 ед^2
елси точка внутри имеет НЕ целые координаты:
10.783245324623 + 2.125346347 + 2.103246326236 не равно 15.0!
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
29.12.2010, 22:05 18
Mayonez, если уж на то пошло, то 15 не равно 15 (в том виде, в котором это 15 хранится в типе double). Поэтому сравнивают переменные типа double не так. Обычно это делают так:
C++
1
2
3
4
if (fabs(a - b) < 1E-8)
    std::cout << "Равны";
else
    std::cout << "Не равны";
0
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
29.12.2010, 22:17 19
Цитата Сообщение от silent_1991 Посмотреть сообщение
Mayonez, если уж на то пошло, то 15 не равно 15 (в том виде, в котором это 15 хранится в типе double). Поэтому сравнивают переменные типа double не так. Обычно это делают так:
а если эта погрешность окажется и точка будет лежать за треугольником - программа выдаст - ДА
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
29.12.2010, 22:33 20
Mayonez, к сожалению, когда рассчитывают траектории космических кораблей, пользуются именно тем способом сравнения, который я указал...

Добавлено через 3 минуты
А вообще я не понял, о чём мы спорим? Те же погрешности появляются и в псевдоскалярном произведении... Что вы хотели, компьютер - вещь дискретная, и при расчётах всегда найдется интервал меньше, чем минимально возможный, представимый в памяти...
0
29.12.2010, 22:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2010, 22:33
Помогаю со студенческими работами здесь

Дана точка М(x, y). Присвоить z = 1, если точка принадлежит окружности с радиусом R и центром в точке (a, b) и z = 0 в противном случае.
Дана точка М(x, y). Присвоить z = 1, если точка принадлежит окружности с радиусом R и центром в...

Дана ограниченная область и точка A(x0, y0). Написать программу, которая проверяет, попадает ли точка с координатами пол
Дана ограниченная область и точка A(x0, y0). Написать программу, которая проверяет, попадает ли...

Найти углы в треугольнике
Стороны с горем пополам я смог найти, по ним нужно найти углы. Заранее благодарю....

Даны отрезки [a, b] и [c, d] и точка A с координатой х. Определить, принадлежит ли данная точка одному из этих отрезков, обоим или лежит вне их
Даны отрезки и и точка A с координатой х. Определить, принадлежит ли данная точка одному из этих...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru