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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
kura007
1 / 1 / 0
Регистрация: 02.12.2012
Сообщений: 17
#1

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

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

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


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

Известны координаты вершин треугольника, определить его площадь - C++
#include <iostream> #include <math.h> #include <cmath> using namespace std; int main() { int x,y,z,z1,z2,y1,y2,x1,x2; float...

Даны координаты вершин треугольника и координаты некоторой точки внутри него - C++
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны...

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

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

Заданы координаты трех вершин прямоугольника, необходимо определить координаты четвертой вершины - C++
Заданы координаты трех вершин прямоугольника. Необходимо определить координаты четвертой вершины. Можете найти? Добавлено через 1...

Ввести координаты вершин треугольника. Проверить, является ли он равнобедренным - C++
1 Ввести координаты вершин треугольника. Проверить, является ли он равнобедренный. 2 Ввести координаты двух точек. Найти место...

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

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

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

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

Найти площадь треугольника, если известны координаты его вершин - C++
1. Напишите программу, которая вычисляет площадь треугольника, если известны координаты его вершин. Вычисление площади треугольника. ...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
03.01.2013, 19:21
Ответ Создать тему
Опции темы

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