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

Определить вид треугольника по координатам вершин - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.72
Wroker
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 34
17.12.2012, 10:36     Определить вид треугольника по координатам вершин #1
Задача 2 : Задача на строки. Даны координаты трех точек на плоскости. Если они могут быть вершинами треугольника, определите его вид( разносторонний, равнобедренный, равносторонний). Вычислить длины его высот и напечатайте их в порядке убывания.

Вообщем.. Первую задачу вообще не знаю как делать, но повторой кое что есть..

Не совсем понятно, как нужно высоты вычислить.. и как вывести в порядке убывания!?
2 :
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 <cstdlib>
#include <ctime>
using namespace std;
int main() {
 
    int a = rand(), b = rand(), c = rand();
    system("echo Вводим стороны");
    cin>>a>>b>>c;
    
 
    if (a < b + c && b < a + c && c < a + b) {
        if (a == b && b == c)
        system("echo Равносторонний");
          
        else 
             if (a == b || b == c || a == c)
             system("echo Равнобедренный");
               
        else
         system("echo Разносторонний");
            
    }
    else
    system("echo не существует"); 
    
 
   
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2012, 10:36     Определить вид треугольника по координатам вершин
Посмотрите здесь:

C++ Определить процедуру вычисления площади треугольника по координатам его вершин
По координатам трех вершин некоторого треугольника найти его площадь и периметр. C++
C++ 25. По координатам вершин четырехугольника определить, выпуклый он или нет
C++ Вычислить периметр и площадь треугольника по заданным координатам его вершин
Разработать методы вычисления длины отрезка по координатам вершин и периметра треугольника по длинам сторон C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 11:30     Определить вид треугольника по координатам вершин #2
А вторая задача кажется тоже не правильно сделана. Надо координаты трех точек вводить [x, y]. А у вас длины сторон.)
Если срочно надо то попробую переделать
Wroker
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 34
17.12.2012, 11:36  [ТС]     Определить вид треугольника по координатам вершин #3
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
А вторая задача кажется тоже не правильно сделана. Надо координаты трех точек вводить [x, y]. А у вас длины сторон.)
Если срочно надо то попробую переделать
Буду очень признателен, если сделаете..А с первой задачей помочь сможете?
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 12:00     Определить вид треугольника по координатам вершин #4
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
#include <iostream>
#include <cmath>
using namespace std;
 
// точка
struct Point
{
    int x;
    int y;
};
 
// площадь треугольника
double Square(double a, double b, double c)
{
    double p = (a+b+c) / 2.0;
    return sqrt(p*(p-a)*(p-b)*(p-c));
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    Point A, B, C;          // координаты трех точек
    double l1, l2, l3;      // длины сторон треугольника
 
    cout << "Введите координаты первой точки [x, y]:  ";    cin >> A.x >> A.y;
    cout << "Введите координаты второй точки [x, y]:  ";    cin >> B.x >> B.y;
    cout << "Введите координаты третьей точки [x, y]: ";    cin >> C.x >> C.y;
 
    l1 = sqrt(double((B.x-A.x)*(B.x-A.x) + (B.y-A.y)*(B.y-A.y)));
    l2 = sqrt(double((C.x-A.x)*(C.x-A.x) + (C.y-A.y)*(C.y-A.y)));
    l3 = sqrt(double((C.x-B.x)*(C.x-B.x) + (C.y-B.y)*(C.y-B.y)));
 
    if (l1<l2+l3 && l2<l1+l3 && l3<l1+l2)   // если треугольник
    {
        if (l1==l2 && l2==l3) cout << "Равносторонний" << endl;
        else if (l1==l2 || l1==l3 || l2==l3) cout << "Равнобедренный" << endl;
        else cout << "Разносторонний" << endl;
 
        double S = Square(l1, l2, l3);                  // площадь
        double arr_h[3] = {2*S/l1, 2*S/l2, 2*S/l3};     // высоты треугольника
        
        // упорядочить высоты в порядке возрастания
        for (int i=0; i<2; i++)
            for (int j=i+1; j<3; j++)
                if (arr_h[j] < arr_h[i])
                {
                    double tmp = arr_h[j];
                    arr_h[j] = arr_h[i];
                    arr_h[i] = tmp;
                }
 
        // печать высот в порядке возрастания
        for (int i=0; i<3; i++)
            cout << arr_h[i] << " ";
        cout << endl;
 
    }
    else
        cout << "Не треугольник" << endl;
 
 
    system("pause");
    return 0;                   
}
Wroker
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 34
17.12.2012, 12:15  [ТС]     Определить вид треугольника по координатам вершин #5
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
..
Не совсем понятно..
как я понимаю если вводим все точки одинакого то это равносторонний, так?
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 13:35     Определить вид треугольника по координатам вершин #6
Если ввести все точки одинаково, то напишет что "Не треугольник". Все правильно
Миниатюры
Определить вид треугольника по координатам вершин   Определить вид треугольника по координатам вершин  
Wroker
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 34
17.12.2012, 13:58  [ТС]     Определить вид треугольника по координатам вершин #7
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
Если ввести все точки одинаково, то напишет что "Не треугольник". Все правильно
Объесни вот это вот if (l1==l2 && l2==l3) cout << "Равносторонний" << endl;

т.е получается l1 = вводим две точки допстим (2 2)
l2 = вводим две точки (3 1)
получается l1== l2 ? и получается тогда вводим третью :
l3 = вводим две точки (1 3)
l2== l3 ? По сути должны быть стороны равны? или нет? Просто пишет, что это не треугольник.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 14:24     Определить вид треугольника по координатам вершин #8
Цитата Сообщение от Wroker Посмотреть сообщение
Объясни вот это вот if (l1==l2 && l2==l3) cout << "Равносторонний" << endl;
l1, l2 и l3 это длины сторон треугольника. Они рассчитываются через точки вершин по теореме Пифагора(квадрат гипотенузы равен сумме квадратов катетов), вот так:
C++
1
2
3
    l1 = sqrt(double((B.x-A.x)*(B.x-A.x) + (B.y-A.y)*(B.y-A.y)));
    l2 = sqrt(double((C.x-A.x)*(C.x-A.x) + (C.y-A.y)*(C.y-A.y)));
    l3 = sqrt(double((C.x-B.x)*(C.x-B.x) + (C.y-B.y)*(C.y-B.y)));
A, B и C - это точки на плоскости:
C++
1
2
3
4
5
6
7
struct Point
{
    int x;
    int y;
};
...
Point A, B, C;
Если все стороны равны l1==l2 && l2==l3 то тогда это равносторонний треугольник

Вообщем если есть две точки на плоскости A и B, то расстояние между ними можно посчитать таким способом
C++
1
 l1 = sqrt(double((B.x-A.x)*(B.x-A.x) + (B.y-A.y)*(B.y-A.y)));
Wroker
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 34
17.12.2012, 14:32  [ТС]     Определить вид треугольника по координатам вершин #9
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
l1, l2 и l3 это длины сторон треугольника. Они рассчитываются через точки вершин по теореме Пифагора(квадрат гипотенузы равен сумме квадратов катетов), вот так:
Спасибо вам, что мне все наглядно объяснили можно сказать.. Но равносторонний треугольник я все равно по точкам построить не получается, пишет что это не треугольник..
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 14:51     Определить вид треугольника по координатам вершин #10
Где-то ошибка. Сейчас пробовал вводить координаты для равностороннего треугольника, но печатает "Равнобедренный". Буду искать
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 14:59     Определить вид треугольника по координатам вершин #11
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
71
#include "stdafx.h"
#include "iostream"
using namespace std;
 
// точка
struct Point
{
    double x;
    double y;
};
 
// площадь треугольника
double Square(double a, double b, double c)
{
    double p = (a+b+c) / 2.0;
    return sqrt(p*(p-a)*(p-b)*(p-c));
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    const double epsilon = 0.0000001;
    Point A, B, C;              // координаты трех точек
    double l1, l2, l3;          // длины сторон треугольника
 
    cout << "Введите координаты первой точки [x, y]:  ";    cin >> A.x >> A.y;
    cout << "Введите координаты второй точки [x, y]:  ";    cin >> B.x >> B.y;
    cout << "Введите координаты третьей точки [x, y]: ";    cin >> C.x >> C.y;
 
    l1 = sqrt(abs((B.x-A.x)*(B.x-A.x)) + abs((B.y-A.y)*(B.y-A.y)));
    l2 = sqrt(abs((C.x-A.x)*(C.x-A.x)) + abs((C.y-A.y)*(C.y-A.y)));
    l3 = sqrt(abs((C.x-B.x)*(C.x-B.x)) + abs((C.y-B.y)*(C.y-B.y)));
 
    cout << "l1 = " << l1 << endl;
    cout << "l2 = " << l2 << endl;
    cout << "l3 = " << l3 << endl;
 
    if (l1<l2+l3 && l2<l1+l3 && l3<l1+l2)   // если треугольник
    {
        if (abs(l1-l2)<=epsilon && abs(l2-l3)<=epsilon) cout << "Равносторонний" << endl;
        else if (abs(l1-l2)<=epsilon || abs(l1-l3)<=epsilon || abs(l2-l3)<=epsilon) cout << "Равнобедренный" << endl;
        else cout << "Разносторонний" << endl;
 
        double S = Square(l1, l2, l3);                  // площадь
        double arr_h[3] = {2*S/l1, 2*S/l2, 2*S/l3};     // высоты треугольника
        
        // упорядочить высоты в порядке возрастания
        for (int i=0; i<2; i++)
            for (int j=i+1; j<3; j++)
                if (arr_h[j] < arr_h[i])
                {
                    double tmp = arr_h[j];
                    arr_h[j] = arr_h[i];
                    arr_h[i] = tmp;
                }
 
        // печать высот в порядке возрастания
        for (int i=0; i<3; i++)
            cout << arr_h[i] << " ";
        cout << endl;
 
    }
    else
        cout << "Не треугольник" << endl;
 
    
    cout << endl;
    system("pause");
    return 0;               
}
35, 36 и 37 строчку можно убрать. это просто для проверки длин сторон
Миниатюры
Определить вид треугольника по координатам вершин  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2012, 20:23     Определить вид треугольника по координатам вершин
Еще ссылки по теме:

Нахождение площади параллелограмма, треугольника и объема параллелепипеда, тетраэдра по координатам вершин C++
Вычислить площадь и периметр треугольника по координатам трех вершин C++
C++ Составить функцию вычисления площади треугольника по координатам вершин

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

Или воспользуйтесь поиском по форуму:
vizapromo
 Аватар для vizapromo
18 / 11 / 1
Регистрация: 04.12.2012
Сообщений: 51
17.12.2012, 20:23     Определить вид треугольника по координатам вершин #12
Вводятся длины сторон треугольника и вывести его тип, а если такого треугольника не существует, то сообщить об этом. Я правильно понял? Вот моя версия:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <clocale>
using namespace std;
int main ()
{
    setlocale(LC_ALL, "rus");
    int a , b , c ;
    cin >> a >> b >> c ;
    if (a + b <= c || a + c <= b || c + b <= a)
        cout << "такого треугольника не существует" << endl;
    else if ((c > a && c > b && (a * a + b * b) == c * c) || (a > b && a > c && a * a == (b * b + c * c)) || (b * b == (c * c + a * a)))
        cout << "Прямоугольный" << endl;
    else if ((c > max(a , b) && c * c > a * a + b * b) || (a > max(c , b) && a * a > b * b + c * c) || (b * b > c * c + a * a))
        cout << "Тупоугольный" << endl;
    else
        cout << "Остроугольный" << endl;
    return 0;
}
Yandex
Объявления
17.12.2012, 20:23     Определить вид треугольника по координатам вершин
Ответ Создать тему
Опции темы

Текущее время: 00:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru