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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 90, средняя оценка - 4.93
Непрограммистка
0 / 0 / 0
Регистрация: 15.09.2010
Сообщений: 45
#1

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

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

Помогите!
даны три вершины треугольника с координатами(коорд вводятся с клавиатуры) А(х1,y1) B(х2,y2) и С(х3,y3). И вводятся координаты другой точки Д(х4,y4)-и нужно определить принадлежит эта точка треугольнику или нет!А перед этим еще проверить возможен ли треугольник с такими точками.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2010, 18:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Точка в треугольнике (C++):

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

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

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

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

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

Найти углы в треугольнике - C++
Стороны с горем пополам я смог найти, по ним нужно найти углы. Заранее благодарю. #include<iostream.h> #include<math.h> ...

34
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.12.2010, 21:57 #16
Mayonez, а что, нынче с дробными числами работать не удаётся? Аппаратные трудности? Или над их полем умножение не определили?
0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
29.12.2010, 22:01 #17
Цитата Сообщение от silent_1991 Посмотреть сообщение
Аппаратные трудности?
скорее програмные
допустим, площадь треугольника 15 ед^2
елси точка внутри имеет НЕ целые координаты:
10.783245324623 + 2.125346347 + 2.103246326236 не равно 15.0!
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
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
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
29.12.2010, 22:17 #19
Цитата Сообщение от silent_1991 Посмотреть сообщение
Mayonez, если уж на то пошло, то 15 не равно 15 (в том виде, в котором это 15 хранится в типе double). Поэтому сравнивают переменные типа double не так. Обычно это делают так:
а если эта погрешность окажется и точка будет лежать за треугольником - программа выдаст - ДА
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.12.2010, 22:33 #20
Mayonez, к сожалению, когда рассчитывают траектории космических кораблей, пользуются именно тем способом сравнения, который я указал...

Добавлено через 3 минуты
А вообще я не понял, о чём мы спорим? Те же погрешности появляются и в псевдоскалярном произведении... Что вы хотели, компьютер - вещь дискретная, и при расчётах всегда найдется интервал меньше, чем минимально возможный, представимый в памяти...
0
Mayonez
29.12.2010, 22:35
  #21

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Mayonez, к сожалению, когда рассчитывают траектории космических кораблей, пользуются именно тем способом сравнения, который я указал...
поэтому и случается столько нестчастных случаев

1
silent_1991
29.12.2010, 22:37
  #22

Не по теме:

Mayonez, я был уверен, что вы ответите именно так

0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
29.12.2010, 22:45 #23
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
пошутил...
silent_1991, извините если что не так, ну а если серйозно, то
Помогите!
даны три вершины треугольника с координатами(коорд вводятся с клавиатуры) А(х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
#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;
   cout << "Введите сначала координаты вершин треугольника, а затем "
        << "координаты точки:" << endl;
   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))
   {
      if (area(a, b, c) == area(a, b, d) + area(a, d, c) + area(b, d, c))
            cout << "Точка находится внутри треугольника\n";
      else 
            cout << "Точка находится вне треугольника\n";
   }
   else
      cout << "Треугольник не существует\n";
   /////////////////////////////////////////////////////////////////////////////
   return 0;
}
6
silent_1991
29.12.2010, 22:51
  #24

Не по теме:

Цитата Сообщение от 'Mayonez' Посмотреть сообщение
пошутил...
Я понял)))

1
rekryt
1 / 1 / 0
Регистрация: 29.12.2010
Сообщений: 4
29.12.2010, 22:54 #25
фокус!
1
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
29.12.2010, 22:56 #26
Цитата Сообщение от rekryt Посмотреть сообщение
фокус!
первое сообщение, да?
1
Непрограммистка
0 / 0 / 0
Регистрация: 15.09.2010
Сообщений: 45
02.01.2011, 20:41  [ТС] #27
А можно прокомментировать строчки, плиз!
Цитата Сообщение от Mayonez Посмотреть сообщение
пошутил...
silent_1991, извините если что не так, ну а если серйозно, то

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
#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;
   cout << "Введите сначала координаты вершин треугольника, а затем "
        << "координаты точки:" << endl;
   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))
   {
      if (area(a, b, c) == area(a, b, d) + area(a, d, c) + area(b, d, c))
            cout << "Точка находится внутри треугольника\n";
      else 
            cout << "Точка находится вне треугольника\n";
   }
   else
      cout << "Треугольник не существует\n";
   /////////////////////////////////////////////////////////////////////////////
   return 0;
}
0
RepoMen
13 / 2 / 1
Регистрация: 24.11.2010
Сообщений: 10
09.01.2011, 16:47 #28
Цитата Сообщение от Непрограммистка Посмотреть сообщение
А можно прокомментировать строчки, плиз!
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 <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; //четыре точки
   cout << "Введите сначала координаты вершин треугольника, а затем "
        << "координаты точки:" << endl;
   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))
   {
   //если площадь первого треугольника (координаты указаны в скобках)
   //равна сумме площадей остальных 3, то...
      if (area(a, b, c) == area(a, b, d) + area(a, d, c) + area(b, d, c))
            cout << "Точка находится внутри треугольника\n";
      else 
            cout << "Точка находится вне треугольника\n";
   }
   //если площадь нулевая, значит...
   else
      cout << "Треугольник не существует\n";
   /////////////////////////////////////////////////////////////////////////////
   return 0;
}
Добавлено через 10 секунд
Цитата Сообщение от Непрограммистка Посмотреть сообщение
А можно прокомментировать строчки, плиз!
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 <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; //четыре точки
   cout << "Введите сначала координаты вершин треугольника, а затем "
        << "координаты точки:" << endl;
   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))
   {
   //если площадь первого треугольника (координаты указаны в скобках)
   //равна сумме площадей остальных 3, то...
      if (area(a, b, c) == area(a, b, d) + area(a, d, c) + area(b, d, c))
            cout << "Точка находится внутри треугольника\n";
      else 
            cout << "Точка находится вне треугольника\n";
   }
   //если площадь нулевая, значит...
   else
      cout << "Треугольник не существует\n";
   /////////////////////////////////////////////////////////////////////////////
   return 0;
}
0
Непрограммистка
0 / 0 / 0
Регистрация: 15.09.2010
Сообщений: 45
10.01.2011, 13:57  [ТС] #29
Мне бы без структур и функций программку нужно!
Мне ее в visual c++ писать!
0
Lena _t
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 32
20.05.2011, 17:38 #30
Цитата Сообщение от Непрограммистка Посмотреть сообщение
Мне бы без структур и функций программку нужно!
Мне ее в visual c++ писать!
Вот мне тоже надо такую программку .Помогите
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2011, 17:38
Привет! Вот еще темы с ответами:

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

Найти длины высот в треугольнике - C++
. Треугольник задан длинами сторон. Найти: а) длины высот; б) длины медиан; в) длины биссектрис; г) радиусы вписанной и описанной...

Линейная задача о круге в треугольнике - C++
Требования к программе: - Числовые значения переменных ввести с клавиатуры, вывод напоминания при этом обязательно; - Вывести на...

Нахождение всех углов в треугольнике - C++
Найти все углы треугольника со сторонами a , b , c . Предусмотреть в программе перевод радианной меры угла в градусы, минуты и секунды. ...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
20.05.2011, 17:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru