Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
kura007
1 / 1 / 4
Регистрация: 02.12.2012
Сообщений: 17
#1

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

03.01.2013, 14:26. Просмотров 1398. Ответов 7
Метки нет (Все метки)

определить координаты вершин прямоугольника наименьшего периметра содержащего треугольник координаты вершин котрого (x1,y1), (x2,y2), (x3,y3)


не могу математически даже вникнуть в условие. решения нет никакого. помогите пожалуйста к может. на зачёт завтра нужно решить эту задачу. буду сильно благодарен!

http://www.cyberforum.ru/cpp-beginners/thread1972808.html

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2013, 14:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить координаты вершин прямоугольного треугольника (C++):

Даны координаты вершин треугольника и координаты некоторой точки внутри него
Даны координаты вершин треугольника и координаты некоторой точки внутри него....

Заданы координаты вершин треугольника. Вывести их в порядке обхода треугольника по часовой стрелке
Заданы координаты вершин треугольника.Вывести их в порядке обхода треугольника...

Найти координаты вершин треугольника из bmp файла
нам дан bmp файл на котором нарисован треугольник. размер файла 512*512. как...

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

Найти углы треугольника если заданы координаты вершин
#include <iostream> #include <conio.h> using namespace std; int main() { ...

7
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 15:43 #2
Цитата Сообщение от kura007 Посмотреть сообщение
наименьшего периметра
вот это самое главное, а что за дисциплина что такие задачи дают, я попытаюсь что нибудь настряпать,интересно стало
0
kura007
1 / 1 / 4
Регистрация: 02.12.2012
Сообщений: 17
03.01.2013, 15:52  [ТС] #3
ОАИП! программирование обычное. на с++ естественно! впринципе задача как бы ясна - построить сначала треугольник и найти периметр прямоугольника внутри которого этот треугольник. но вот ещё и наименьший тут проблема ещё больше становится
0
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 15:56 #4
я вижу это так, задаемся треугольником, находим его длины, и тут по моему наименьший описанный будет тот у которого катет является наибольшей стороной данного треугольника
1
kura007
1 / 1 / 4
Регистрация: 02.12.2012
Сообщений: 17
03.01.2013, 16:02  [ТС] #5
видимо так и будет. буду очень благодарен если запишешь и кинешь код сегодня. а то завтра на зачёт. а с с++ у меня проблемы есть( учусь. разбираюсь как могу. но не все задачи мне под силу . а ещё и математически бывают очень сложно(
0
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 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;
}
щас еще запилю визуальную прогу чтоб более наглядно было
0
kura007
1 / 1 / 4
Регистрация: 02.12.2012
Сообщений: 17
03.01.2013, 16:49  [ТС] #7
да давай. жду
0
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 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 минут
боюсь я запутался задача оказалась мне не под силу )=
0
03.01.2013, 19:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2013, 19:21
Привет! Вот еще темы с решениями:

Ввести координаты вершин треугольника. Проверить, является ли он равнобедренным
1 Ввести координаты вершин треугольника. Проверить, является ли он...

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

Найти площадь треугольника, если заданы координаты его вершин
Найти площадь треугольника если заданы координаты его вершин

Найти площадь треугольника, если заданы координаты его вершин
Исправте ошибки пожалуйста очень надо Найти площадь треугольника, если...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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