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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Графический режим: отрезок в движении http://www.cyberforum.ru/cpp-beginners/thread1133576.html
рисовать прямая в движении черта программа на языке С++
C++ Написать класс "прямоугольник" с методом, который проверяет пересечение с другим прямоугольником Всем Привет!!! Пытаюсь решить задачку второй день ничего не выходит, полазил по нету много всего нашел , но ничего на подошло , помогите пожалуйста ! Вообщем есть задача , нужно написать класс прямоугольника и там должен быть метод ,который проверяет на пересечение и возвращает true если пересекаются или false если не пересекаются . и если пересекаются то прямоугольник нужно сделать , как бы... http://www.cyberforum.ru/cpp-beginners/thread1133574.html
Как работает генерация случайных чисел в приведенном коде C++
Дорогие Форумчане! Подскажите пожалуйста, как работает нижеследующий код для генерации случайных чисел: random=rand()%(b+1-a)+a; Не могли бы объяснить, почему (Б плюс 1, а потом минус А) и плюс А. Как выбирается диапазон между А и Б? Ниже приведен пример:
Как сделать так чтобы персонаж в игре двигался сам C++
На данный момент я учусь писать игры на C++. Я сделал так чтобы персонаж двигался клавишами, а как сделать так чтобы он сам двигался в определенную сторону и с определенной скоростью Добавлено через 6 минут я делаю игру наподобие марио
C++ Как бороться с гогой? http://www.cyberforum.ru/cpp-beginners/thread1133562.html
enum A{a...}; class B { public: bool m(A x); }; void f(const B &b) { if (b.m(a)) // Ругается на эту строчку, говорит error: passing 'const B' as 'this' argument of 'bool B::m(A)' discards qualifiers | {
C++ Сортировка дат по 4 ключам Есть даты такого формата: Fri, 28 Mar 2014 16:42:58 PDT Fri, 28 Mar 2014 15:16:47 PDT Sat, 29 Mar 2014 13:33:05 PDT Sat, 29 Mar 2014 13:23:32 PDT Sat, 29 Mar 2014 12:28:34 PDT Sat, 29 Mar 2014 13:30:56 PDT Sat, 29 Mar 2014 13:56:19 PDT Нужно сортировать по 4 параметрам: год, месяц, день, время. подробнее

Показать сообщение отдельно
IrineK
Заблокирован
30.03.2014, 12:44     Задача на структуры: выбор точек, образующих треугольник наибольшего периметра
Ну вот, даже с картинкой )

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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include <iostream>
#include <ctime>
#include <cmath>
#include <Windows.h>
 
POINT **CreateArray (int N)
{   int i;
    POINT **arr = new POINT*[N];
    for (i = 0; i<N; i++)
    {   arr[i] = new POINT;
        arr[i]->x = rand()%300 + 100;
        arr[i]->y = rand()%100 + 100;
    }
    return arr;
}
 
void DeleteArray (POINT** arr, int N)
{   for (int i = 0; i<N; i++)
        delete arr[i];
    delete [] arr;
}
 
void ShowArray (HDC hDC, POINT** arr, int N, COLORREF color)
{   printf("points:\n");
    for (int i = 0; i<N; i++)
    {   SetPixel(hDC, arr[i]->x, arr[i]->y, color);
        SetPixel(hDC, arr[i]->x-1, arr[i]->y-1, color);
        SetPixel(hDC, arr[i]->x+1, arr[i]->y+1, color);
        SetPixel(hDC, arr[i]->x-1, arr[i]->y+1, color);
        SetPixel(hDC, arr[i]->x+1, arr[i]->y-1, color);
        printf("(%d, %d)\n", arr[i]->x, arr[i]->y);
    }   
}
 
typedef struct _TTriangle
{   POINT *A, *B, *C;
    double a,b,c;
    double perimeter;
}   TTriangle;
 
int IsTriangle (POINT *A, POINT * B, POINT *C)
{   return (B->x - A->x) * (C->y - A->y) - (C->x - A->x) * (B->y - A->y);
}
 
double Length (POINT *A, POINT * B)
{   return sqrt (1.*(A->x - B->x) * (A->x - B->x) + (A->y - B->y)*(A->y - B->y));
}
 
TTriangle **CreateTriangles (POINT** arr, int N, int M)
{   int count = 0, i, j, k;
    TTriangle **tri = new TTriangle*[M];
    for (i = 0; i<M; i++)
    {   tri[i] = new TTriangle;
        tri[i]->A = new POINT;
        tri[i]->B = new POINT;
        tri[i]->C = new POINT;
    }
 
    for (i = 0; i<N-2; i++)
        for (j = i+1; j<N-1; j++)
            for (k = j+1; k<N; k++)
            {   tri[count]->A->x = arr[i]->x; tri[count]->A->y = arr[i]->y;
                tri[count]->B->x = arr[j]->x; tri[count]->B->y = arr[j]->y;
                tri[count]->C->x = arr[k]->x; tri[count]->C->y = arr[k]->y;
 
                if(!IsTriangle (tri[count]->A, tri[count]->B, tri[count]->C))
                    tri[count]->a = tri[count]->b = tri[count]->c = 0.;
                else
                {   tri[count]->a = Length (tri[count]->B,  tri[count]->C);
                    tri[count]->b = Length (tri[count]->A,  tri[count]->C);
                    tri[count]->c = Length (tri[count]->A,  tri[count]->B);
                }
                tri[count]->perimeter = tri[count]->a + tri[count]->b + tri[count]->c;
                count++;
            }
 
    return tri;
}
 
void DeleteTri (TTriangle *t)
{   delete t->A;
    delete t->B;
    delete t->C;
    delete t;
}
 
void DeleteTriangles (TTriangle **tri, int M)
{   for (int i = 0; i<M; i++)
        DeleteTri (tri[i]);
    delete [] tri;
}
 
TTriangle *GetTriMaxPerimeter (TTriangle **tri, int M)
{   int pos = 0, i = 0;
    double max = 0.;
    for ( ; i<M; i++)
        if (tri[i]->perimeter > max)
        {   max = tri[i]->perimeter;
            pos = i;
        }
    TTriangle *found = new TTriangle;
    found->A = new POINT;
    found->B = new POINT;
    found->C = new POINT;
 
    found->A->x = tri[pos]->A->x; found->A->y = tri[pos]->A->y;
    found->B->x = tri[pos]->B->x; found->B->y = tri[pos]->B->y;
    found->C->x = tri[pos]->C->x; found->C->y = tri[pos]->C->y;
    found->a = tri[pos]->a;
    found->b = tri[pos]->b;
    found->c = tri[pos]->c;
    found->perimeter = tri[pos]->perimeter;
 
    return found;
}
 
void ShowTriangle (HDC hDC, TTriangle *t)
{   HPEN hPen = CreatePen(PS_SOLID, 3, RGB(255,0,0));
    SelectObject(hDC, hPen);
    POINT p;
    
    GetCurrentPositionEx(hDC, &p);
    MoveToEx(hDC, t->A->x, t->A->y, &p);
    LineTo (hDC, t->B->x, t->B->y);
    LineTo (hDC, t->C->x, t->C->y);
    LineTo (hDC, t->A->x, t->A->y);
 
    printf("\n\n\n\n\n\n\nmax perimeter: %.3lf\n", t->perimeter);
    printf("triangle:\n(%d, %d)\n(%d, %d)\n(%d, %d)\n", t->A->x, t->A->y, t->B->x, t->B->y, t->C->x, t->C->y);
    
    DeleteObject (hPen);
}
 
 
 
int main()
{   int N = 10;
    HDC hDC = GetDC(GetConsoleWindow());
    srand ((unsigned int) time (NULL));
    
    POINT **points = CreateArray (N);
    ShowArray (hDC, points, N, RGB (255,255,0));
 
    int M = N*(N-1)*(N-2) / 6;
    TTriangle **tri = CreateTriangles (points, N, M);
 
    TTriangle *found = GetTriMaxPerimeter (tri, M);
    ShowTriangle (hDC, found);
 
    DeleteArray (points, N);
    DeleteTriangles (tri, M);
    DeleteTri (found);
 
    getchar();
    return 0;
}
Миниатюры
Задача на структуры: выбор точек, образующих треугольник наибольшего периметра  
 
Текущее время: 02:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru