Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/48: Рейтинг темы: голосов - 48, средняя оценка - 4.69
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 58
1

Определить, попадает ли точка в заданный треугольник

06.01.2013, 22:28. Показов 8848. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я тут подумал и понял что его можно решить через нахождение длин трёх сторон, полупериметр и затем уже через формулу Герона подсчитать площадь. Затем просто найдём площади 3х треугольников, у которых одна вершина будет в точке D, место которой надо определить (внутри или вне треугольника). ACD, ABD, BCD. Сложить эти три площади и если они равны площади первоначального треугольника, то точка входит. Но меня вводит в ступор то что как бы треугольники же разные бывают: прямоугольный, равнобедренный, равносторонний и вообще конченный 4-ый .

Я пере конвертировал свои мысли в электронный вид C#
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
            double[] X = new double [3];
        double[] Y = new double [3];
            int i=0;
            Console.WriteLine("Введите значение по X:");
            for (i = 0; i < 3; i++)
            {
                X[i] = Convert.ToDouble(Console.ReadLine());
            }
            Console.WriteLine("Введите значение по Y:");
            for (i = 0; i < 3; i++)
            {
                Y[i] = Convert.ToDouble(Console.ReadLine());
            }
 
            double S1 = 0;
        double a, b, c, p;
            a = Math.Sqrt(Math.Pow(Y[0] - Y[2], 2) + Math.Pow(X[0] - X[2], 2));
            b = Math.Sqrt(Math.Pow(Y[1] - Y[2], 2) + Math.Pow(X[1] - X[2], 2));
        c = Math.Sqrt(Math.Pow(Y[0] - Y[1], 2) + Math.Pow(X[0] - X[1], 2));
        p = (a + b + c) / 2;
        S1 = Math.Sqrt(p * (p - a) * (p - b) * (p - c));
            Console.WriteLine("Введите координаты точки dx:");
            int dx = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите координаты точки dy:");
            int dy = Convert.ToInt32(Console.ReadLine());
Судя по всем у меня должно быть очень -очень-очень много формул. Или я несу ерунду?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2013, 22:28
Ответы с готовыми решениями:

Треугольник задан координатами вершин х 1 у1 х 2 у 2 х 3 у 3 точка а задана координатами х у требуется написать программу определяющую попадает ли указанная точка в заданный треугольник
Треугольник задан координатами вершин х 1 у1 х 2 у 2 х 3 у 3 точка а задана координатами х у...

Определить попадает ли заданная точка в заданный прямоугольник
Сроочно помогите с этой задачей, не могу никак решить, а завтра дэдлайн. Описание: Напишите...

Определить, попадает ли точка M(x,y) в треугольник с вершинами А(1;5) В(7;6) и С(4;1)
1)Определить, попадает ли точка M(x,y) в область треугольник с вершиними А(1;5) В(7;6) и С(4;1) ...

Нужно определить попадает ли заданная точка в треугольник
Нужно определить попадает ли заданная точка в заштрихованный треугольник, границы треугольника...

3
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
07.01.2013, 01:58 2
Нет разницы, какой вид треугольников. Если сумма треугольников образованных с точкой Д равны начальному треугольнику, то все ок.
В случае если 3 точки лежат на одной прямой вставьте условие , ибо один треугольник будет иметь площадь 0 .
C#
1
2
3
4
5
if (a <= b + c && b <= c + a && c <= a + b)
            {
                double p = (a + b + c) / 2;
                double s = Math.Sqrt(p * (p - a) * (p - b) * (p - c));
                return s;
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 58
07.01.2013, 02:53  [ТС] 3
Цитата Сообщение от ITL Посмотреть сообщение
Нет разницы, какой вид треугольников. Если сумма треугольников образованных с точкой Д равны начальному треугольнику, то все ок.
В случае если 3 точки лежат на одной прямой вставьте условие , ибо один треугольник будет иметь площадь 0 .
C#
1
2
3
4
5
if (a <= b + c && b <= c + a && c <= a + b)
            {
                double p = (a + b + c) / 2;
                double s = Math.Sqrt(p * (p - a) * (p - b) * (p - c));
                return s;
Посидел вообщем по тупил и решил вроде бы как задачу. Вот код
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
            double[] X = new double [3];
            double[] Y = new double [3];
            int i=0;
            Console.WriteLine("Введите значение по X:");
            for (i = 0; i < 3; i++)
            {
                X[i] = Convert.ToDouble(Console.ReadLine());
            }
            Console.WriteLine("Введите значение по Y:");
            for (i = 0; i < 3; i++)
            {
                Y[i] = Convert.ToDouble(Console.ReadLine());
            }
 
            double Sabc = 0;
            double ab, bc, ac, p;
            {
                ab = Math.Sqrt(Math.Pow(Y[1] - Y[0], 2) + Math.Pow(X[1] - X[0], 2));
                bc = Math.Sqrt(Math.Pow(Y[2] - Y[1], 2) + Math.Pow(X[2] - X[1], 2));                
                ac = Math.Sqrt(Math.Pow(Y[2] - Y[0], 2) + Math.Pow(X[2] - X[0], 2));
                p = (ab + bc + ac) / 2;
                Sabc = Math.Sqrt(p * (p - ab) * (p - bc) * (p - ac));
            }
            Console.WriteLine("Площадь треугольника равна:" + Sabc);
            double[] Dx = new double [1];
            double[] Dy = new double [1];
            Console.WriteLine("Введите значение точки D по Х:");
            for (i = 0; i < 1; i++)
            {
                Dx[i] = Convert.ToDouble(Console.ReadLine());
            }
            Console.WriteLine("Введите значение точки D по Y:");
            for (i = 0; i < 1; i++)
            {
                Dy[i] = Convert.ToDouble(Console.ReadLine());
            }
            double Sacd = 0, ad, dc;
            {
                ac = Math.Sqrt(Math.Pow(Y[2] - Y[0], 2) + Math.Pow(X[2] - X[0], 2));
                ad = Math.Sqrt(Math.Pow(Dy[0] - Y[0], 2) + Math.Pow(Dx[0] - X[0], 2));
                dc = Math.Sqrt(Math.Pow(Y[2] - Dy[0], 2) + Math.Pow(X[2] - Dx[0], 2));
                p = (ac + ad + dc) / 2;
                Sacd = Math.Sqrt(p * (p - ac) * (p - ad) * (p - dc));
            }
            
            double Sabd = 0, bd;
            {
                ab = Math.Sqrt(Math.Pow(Y[1] - Y[0], 2) + Math.Pow(X[1] - X[0], 2));
                ad = Math.Sqrt(Math.Pow(Dy[0] - Y[0], 2) + Math.Pow(Dx[0] - X[0], 2));
                bd = Math.Sqrt(Math.Pow(Y[1] - Dy[0], 2) + Math.Pow(X[1] - Dx[0], 2));
                p = (ab + ad + bd) / 2;
                Sabd = Math.Sqrt(p * (p - ab) * (p - ad) * (p - bd));
            }
 
            double Sbdc=0, cd;
            {
                bd = Math.Sqrt(Math.Pow(Y[1] - Dy[0], 2) + Math.Pow(X[1] - Dx[0], 2));
                bc = Math.Sqrt(Math.Pow(Y[2] - Y[1], 2) + Math.Pow(X[2] - X[1], 2));
                cd = Math.Sqrt(Math.Pow(X[2]- Dx[0], 2) + Math.Pow(Y[2] - Dy[0], 2));
                p = (bd + bc + cd) / 2;
                Sbdc = Math.Sqrt(p * (p - bd) * (p - bc) * (p - cd));
            }
            if (Sabc == Sacd + Sabd + Sbdc)
            {
                Console.WriteLine("Принадлежит треугольнику");
            }
            else
            { 
                Console.WriteLine("Не принадлежит треугольнику");
            }
0
Заблокирован
07.01.2013, 13:05 4
скорее всего сумма площадей не совпадет на n-м знаке после запятой,
любой луч(не прямая) из D, допустим горизонтальный, должен пересечь только одну из сторон, предусмотреть случай попадания в вершину
0
07.01.2013, 13:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2013, 13:05
Помогаю со студенческими работами здесь

Определить попадает ли точка М(х, у) в прямоугольник, заданный двумя противоположными точками А(х1, у1) и В(х2, у2). (ис
Определить попадает ли точка М(х, у) в прямоугольник, заданный двумя противоположными точками А(х1,...

Определить, попадает ли точка М(с коорд. Х и У) в квадрат, заданный своей верхней левой вершиной и стороной
Здравствуйте. Для ТАСМ необходимо написать код следующей задачи- Определить, попадает ли точка...

Попадает ли точка в треугольник
Всем привет!!! Пожалуйста, помогите с решением задачи на Microsoft Visual C++ 6.0 Нужно...

Точка задана координатами.Определить попадает ли точка в заштрихованную область.
Точка задана координатами.Определить попадает ли точка в заштрихованную область.Вот рисунок к ней


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

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