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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
kura007
1 / 1 / 0
Регистрация: 02.12.2012
Сообщений: 17
03.01.2013, 14:26     Определить координаты вершин прямоугольного треугольника #1
определить координаты вершин прямоугольника наименьшего периметра содержащего треугольник координаты вершин котрого (x1,y1), (x2,y2), (x3,y3)


не могу математически даже вникнуть в условие. решения нет никакого. помогите пожалуйста к может. на зачёт завтра нужно решить эту задачу. буду сильно благодарен!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2013, 14:26     Определить координаты вершин прямоугольного треугольника
Посмотрите здесь:

Ввести координаты вершин треугольника. Проверить, является ли он равнобедренным C++
C++ Даны координаты вершин треугольника и координаты некоторой точки внутри него
C++ Найти площадь треугольника, если заданы координаты его вершин
C++ Найти площадь треугольника, если заданы координаты его вершин
Даны координаты трех вершин треугольника. Найти середины его сторон C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 15:43     Определить координаты вершин прямоугольного треугольника #2
Цитата Сообщение от kura007 Посмотреть сообщение
наименьшего периметра
вот это самое главное, а что за дисциплина что такие задачи дают, я попытаюсь что нибудь настряпать,интересно стало
kura007
1 / 1 / 0
Регистрация: 02.12.2012
Сообщений: 17
03.01.2013, 15:52  [ТС]     Определить координаты вершин прямоугольного треугольника #3
ОАИП! программирование обычное. на с++ естественно! впринципе задача как бы ясна - построить сначала треугольник и найти периметр прямоугольника внутри которого этот треугольник. но вот ещё и наименьший тут проблема ещё больше становится
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 15:56     Определить координаты вершин прямоугольного треугольника #4
я вижу это так, задаемся треугольником, находим его длины, и тут по моему наименьший описанный будет тот у которого катет является наибольшей стороной данного треугольника
kura007
1 / 1 / 0
Регистрация: 02.12.2012
Сообщений: 17
03.01.2013, 16:02  [ТС]     Определить координаты вершин прямоугольного треугольника #5
видимо так и будет. буду очень благодарен если запишешь и кинешь код сегодня. а то завтра на зачёт. а с с++ у меня проблемы есть( учусь. разбираюсь как могу. но не все задачи мне под силу . а ещё и математически бывают очень сложно(
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 16:40     Определить координаты вершин прямоугольного треугольника #6
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>
#include <windows.h>
#include "math.h"
 
using namespace std;
 
 
struct point{
    double x;
    double y;
};
 
double lenght(double x1,double y1,double x2,double y2){
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
 // по теореме косинусов
double getAlpha(point tria[3]){
    double a = lenght(tria[0].x,tria[0].y,tria[2].x,tria[2].y);
    double b = lenght(tria[2].x,tria[2].y,tria[1].x,tria[1].y);
    double c = lenght(tria[0].x,tria[0].y,tria[1].x,tria[1].y);
    return acos((a*a - b*b - c*c)/(-2*b*c));
}
int main()
{
    point triangle[3];   //исходный треугольник
    point ortTriangle[3];//прямоугольный треугольник
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (int i = 0; i < 3; i++) {
        cout << " ВВедите координаты " << i+1 <<" Точки "<< endl;
        cin >> triangle[i].x >> triangle[i].y ;
    }
    int maxPoint[2] = { 0 , 1}; // предположим что наибольшее растояние между 1 и 2 точками
    double maxLenght = lenght(triangle[0].x,triangle[0].y,
                              triangle[1].x,triangle[1].y);
    for (int i = 0; i < 1; i++) {
        double tmpLenght = lenght(triangle[i].x,triangle[i].y,
                                  triangle[2].x,triangle[2].y);
        if (maxLenght < tmpLenght ) {
            maxLenght = tmpLenght;
            maxPoint[0] = i; maxPoint[1] = 2; // наибольшее между 3 и 1 либо 2
        }
    }
    ortTriangle[0] = triangle[maxPoint[0]]; // координаты прямоугольного треугольника
    ortTriangle[1] = triangle[maxPoint[1]]; // по наибольшей стороне исходного
    ortTriangle[2].x = ortTriangle[0].x;
    ortTriangle[2].y = ortTriangle[0].y + sin(getAlpha(triangle))*maxLenght;
    for (int i = 0; i < 3; i++) {
        cout << "Координаты вершины " << i+1 <<" Точки "<< endl;
        cout << ortTriangle[i].x <<" "<< ortTriangle[i].y << endl;
    }
    system("pause");
    return 0;
}
щас еще запилю визуальную прогу чтоб более наглядно было
kura007
1 / 1 / 0
Регистрация: 02.12.2012
Сообщений: 17
03.01.2013, 16:49  [ТС]     Определить координаты вершин прямоугольного треугольника #7
да давай. жду
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2013, 19:21     Определить координаты вершин прямоугольного треугольника
Еще ссылки по теме:

Заданы координаты вершин треугольника. Вывести их в порядке обхода треугольника по часовой стрелке C++
C++ Найти площадь треугольника, если известны координаты его вершин
C++ Найти координаты вершин треугольника из bmp файла

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

Или воспользуйтесь поиском по форуму:
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 19:21     Определить координаты вершин прямоугольного треугольника #8
я ее чисто для тестов сделал, врятли ее можно будет вам показывать и тут ошибки появились, щас буду отлаживать

Добавлено через 1 час 23 минуты
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <windows.h>
#include "math.h"
 
using namespace std;
 
 
struct point{
    double x;
    double y;
};
 
double lenght(double x1,double y1,double x2,double y2){
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
 // по теореме косинусов
double getAlpha(point tria[3]){
    double a = lenght(tria[0].x,tria[0].y,tria[2].x,tria[2].y);
    double b = lenght(tria[2].x,tria[2].y,tria[1].x,tria[1].y);
    double c = lenght(tria[0].x,tria[0].y,tria[1].x,tria[1].y);
    // тут была ошибка a должна быть наименьшей стороной
    if (a > b) {
       double tmp = a;
       a = b;
       b = tmp;
    }
    if (a > c) {
       double tmp = a;
       a = c;
       c = tmp;
    }
    return acos((a*a - b*b - c*c)/(-2*b*c));
}
int main()
{
    point triangle[3];   //исходный треугольник
    point ortTriangle[3];//прямоугольный треугольник
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (int i = 0; i < 3; i++) {
        cout << " ВВедите координаты " << i+1 <<" Точки "<< endl;
        cin >> triangle[i].x >> triangle[i].y ;
    }
    int maxPoint[2] = { 0 , 1}; // предположим что наибольшее растояние между 1 и 2 точками
    double maxLenght = lenght(triangle[0].x,triangle[0].y,
                              triangle[1].x,triangle[1].y);
    for (int i = 0; i < 2; i++) {
        double tmpLenght = lenght(triangle[i].x,triangle[i].y,
                                  triangle[2].x,triangle[2].y);
        if (maxLenght < tmpLenght ) {
            maxLenght = tmpLenght;
            maxPoint[0] = i; maxPoint[1] = 2; // наибольшее между 3 и 1 либо 2
        }
    }
    int minPoint[2] = { 0 , 1};  //для построения третей точки нужно знать минимальные точки
    double minLenght = lenght(triangle[0].x,triangle[0].y,
                              triangle[1].x,triangle[1].y);
    for (int i = 0; i < 2; i++) {
        double tmpLenght = lenght(triangle[i].x,triangle[i].y,
                                  triangle[2].x,triangle[2].y);
        if (minLenght > tmpLenght ) {
            minLenght = tmpLenght;
            minPoint[0] = i; minPoint[1] = 2; // наибольшее между 3 и 1 либо 2
        }
    }
    int indexMinMax;//номер точки образующей и минимальную и максимальную стороны
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
           if (minPoint[i] == maxPoint[j]) {
              indexMinMax = minPoint[i];
           }
        }
    }
    Image1->Canvas->Pen->Color = clGreen;
    ortTriangle[0] = triangle[maxPoint[0]]; // координаты прямоугольного треугольника
    ortTriangle[1] = triangle[maxPoint[1]]; // по наибольшей стороне исходного
    ortTriangle[2].x = triangle[indexMinMax].x;
    ortTriangle[2].y = triangle[indexMinMax].y + tan(getAlpha(triangle))*maxLenght;
    for (int i = 0; i < 3; i++) {
        cout << "Координаты вершины " << i+1 <<" Точки "<< endl;
        cout << ortTriangle[i].x <<" "<< ortTriangle[i].y << endl;
    }
    system("pause");
    return 0;
}
еще остается открытым вопрос по поводу трейтьей точки, так как угол находит не всегда верно по знаку я еще посижу подумаю, ловите пока это ,осмыслите там ,может с углом сами придумаете

Добавлено через 5 минут
хотя щас нашел еще 1 треугольник который не получится, тут весь косяк с 3 точкой )

Добавлено через 49 минут
боюсь я запутался задача оказалась мне не под силу )=
Yandex
Объявления
03.01.2013, 19:21     Определить координаты вершин прямоугольного треугольника
Ответ Создать тему
Опции темы

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