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

Сместить на плоскости три точки с определенной закономерностью - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Объяснить код http://www.cyberforum.ru/cpp-beginners/thread1542534.html
Может кто-нибудь смог бы закомментировать данные участок кода или объяснить что за что отвечает( можно еще и ссылки на сторонние ресуры скинуть)..? Пока дальше циклов и простых функций не продвинулся, а разобраться с кодом очень надо! Заранее спасибо. ... конкретно данный участок позволяет найти повторяющиеся слова(2 и более раза) в строке и образует из них новую последовательность. ...
C++ Найти простые числа и занести их в новый массив Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив. Первая функция ищет простые числа и заносит их в новый массив, вторая – все числа кратные трем, третья – все четные числа. В программе создайте массив из 3-х указателей на эти функции. Добавьте меню, в котором пользователь может выбрать желаемую... http://www.cyberforum.ru/cpp-beginners/thread1542516.html
Ошибка при определении переменной в switch C++
case 2: // почасовые работники - фиксированная плата за 40ч, после 40ч полуторная ставка int workingNorm = 40; int hours; rate = 1.5; // ставка за сверхурочные часы cout << "Enter the salary for hour: "; cin >> salary; cout << "Enter the number of hours: ";
Странная инициализация, объясните код C++
Встретил такой код: int x = (3, 2 , 5 , 4 ); std::cout<<x;//4 Вопросы: -как это называться; -зачем; -что происходит в этом случае; Спасибо!
C++ Как сравнить элемент массива с другими элементами этого же по значению? http://www.cyberforum.ru/cpp-beginners/thread1542492.html
Здравствуйте, мне нужно сравнить определенный элемент массива с другими элементами по значению. К примеру дан массив чисел. Мне нужно сравнить его элемент по значению. То есть встречаются ли в нем другие элементы одинакового значения.
C++ Вывести порядковый номер слова максимальной длины и номер позиции в строке, с которой оно начинается как вывести на экран порядковый номер слова максимальной длины и номер позиции в строке, с которой оно начинается ? подробнее

Показать сообщение отдельно
Barrent
233 / 109 / 35
Регистрация: 04.05.2013
Сообщений: 326
Завершенные тесты: 2
02.10.2015, 20:00     Сместить на плоскости три точки с определенной закономерностью
Сделал первый вариант:

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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#include <iostream>
#include <vector>
#include <math.h>
#include <sstream>
 
using namespace std;
 
const float PI = 3.14159;
 
class Point {
public:
    int x;
    int y;
    Point(int x, int y) {
        this->x = x;
        this->y = y;
    }
    Point() {
        x = 0;
        y = 0;
    }
    Point(Point& P) {
        x = P.x;
        y = P.y;
    }
};
//============================================================
class Line {
    //VARIABLES
public:
    Point A;            //point 1
    Point B;            //point 2
 
    //CONSTRUCTORS
public:
    Line(Point P1, Point P2) {
        A = P1;
        B = P2;
    }
 
    //METHODS
public:
    //Перемещение относительно точки А
    void MoveA(Point newA) {
        float L = sqrt((B.x - A.x)*(B.x - A.x) + (B.y - A.y)*(B.y - A.y));
        float fi = atan2((B.y - A.y), (B.x - A.x));
 
        A = newA;
        //1-й квадрант
        if (fi >= 0 && fi < PI / 2) {
            B.x = round(L*cos(fi) + A.x);
            B.y = round(L*sin(fi) + A.y);
        }
        //2-й квадрант
        if (fi >= PI / 2 && fi <= PI) {
            B.x = round(-L*sin(PI - fi) + A.x);
            B.y = round(L*cos(PI - fi) + A.y);
        }
        //4-й квадрант
        if (fi < 0 && fi >= -PI / 2) {
            B.x = round(L*cos(abs(fi)) + A.x);
            B.y = round(- L*sin(abs(fi)) + A.y);
        }
        //3-й квадрант
        if (fi < -PI / 2 && fi >= -PI) {
            B.x = round(-L*cos(PI + fi) + A.x);
            B.y = round(-L*sin(PI + fi) + A.y);
        }
        
    }
    //Перемещение относительно точки B
    void MoveB(Point newB) {
        //Способ 1
        float L = sqrt((B.x - A.x)*(B.x - A.x) + (B.y - A.y)*(B.y - A.y));
        float fi = atan2((A.y - B.y), (A.x - B.x)); 
        
        B = newB;
        //1-й квадрант
        if (fi >= 0 && fi < PI / 2) {
            A.x = round(L*cos(fi) + B.x);
            A.y = round(L*sin(fi) + B.y);
        }
        //2-й квадрант
        if (fi >= PI / 2 && fi <= PI) {
            A.x = round(-L*sin(PI - fi) + B.x);
            A.y = round(L*cos(PI - fi) + B.y);
        }
        //4-й квадрант
        if (fi < 0 && fi >= -PI / 2) {
            A.x = round(L*cos(abs(fi)) + B.x);
            A.y = round(-L*sin(abs(fi)) + B.y);
        }
        //3-й квадрант
        if (fi < -PI / 2 && fi >= -PI) {
            A.x = round(-L*cos(PI + fi) + B.x); 
            A.y = round(-L*sin(PI + fi) + B.y);
        }
        cout << (PI + fi) * 180 / PI << endl;
    }
 
    string ToString() {
        std::stringstream ss;
        ss << "[(" << A.x << ", " << A.y << "), (" << B.x << ", " << B.y << ")]";
        return ss.str();
    }
};
//============================================================
class PolyLine {
    //VARIABLES
    vector<Line*> lines;
 
    //METHODS
public:
    void AddLine(Point P1, Point P2) {
        lines.push_back(new Line(P1, P2));
    }
    void Print() {
        for(Line* line: lines)
            cout << '\t' << line->ToString();
        cout << endl;
    }
    //переместить точку А указанного отрезка по новым координатам
    bool MoveA(int line_index, Point& A) {
        if (line_index < 0 || line_index >= lines.size())
            return false;
        lines[line_index]->MoveA(A);
        CallNeightboors(line_index);
        return true;
    }
    //переместить точку Б указанного отрезка по новым координатам
    bool MoveB(int line_index, Point& B) {
        if (line_index < 0 || line_index >= lines.size())
            return false;
        lines[line_index]->MoveB(B);
        CallNeightboors(line_index);
        return true;
    }
 
private:
    //Сообщить остальным отрезкам о переносе
    void CallNeightboors(int line_index) {
        auto current = lines.begin();
        for (int i = 0; i < line_index; current++, i++);
        Point P;
        //сдвиг предыдущих      
        for (auto iter = current; iter != lines.begin(); ) {
            P = (*iter)->A;
            iter--;
            (*iter)->MoveB(P);
            P = (*iter)->A;
        }
 
        //сдвиг следующих
        for (auto iter = current; ; ) {
            P = (*iter)->B;
            iter++;
            if (iter == lines.end())
                break;
            (*iter)->MoveA(P);
            P = (*iter)->B;
        }
    }
};
 
int main()
{
    PolyLine poly1;
    poly1.AddLine(Point(-3, -2), Point(9, 4));
    poly1.AddLine(Point(9, 4), Point(-10, -3));
    poly1.AddLine(Point(-10, -3), Point(0, 0));
    cout << "PolyLine1:" << endl;
    poly1.Print();
    poly1.MoveA(1, Point(4, 3));
    cout << "PolyLine1:" << endl;
    poly1.Print();
 
    system("pause");
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru