Форум программистов, компьютерный форум, киберфорум
Наши страницы
SFML
Войти
Регистрация
Восстановить пароль
 
Infernet
0 / 0 / 0
Регистрация: 12.01.2016
Сообщений: 29
Завершенные тесты: 2
1

SFML С++ рисование фигуры и её перемещение под углом с изменением масштаба

20.09.2017, 02:17. Просмотров 1314. Ответов 0
Метки нет (Все метки)

Доброго времени суток, столкнулся с сильным недопониманием библиотеки SFML для с++. Задание было нарисовать трапецию с возможностью изменения её масштаба и перемещение под углом 87, с отскоком от границ окна под углом отражения. Проблема в том, что я не пойму как определить текущие координаты объекта, и его координаты после изменения масштаба. В документации есть функция ConvexShape.getPosition() которая возвращает текущее положение фигуры в виде вектора из 2х координат, но что это за координаты (первой точки или середины), плюс изменение масштаба объекта функцией setScale() не меняет их, но на изображении как мне кажется во все стороны расползается. Прошу помощи
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
#include <SFML/Graphics.hpp>
#include <iostream>
#include <cmath>
#include <Windows.h>
#include <vector>
 
using namespace std;
using namespace sf;
 
int width = 400;
int height = 400;
 
bool isBoard_W(float coord) {
    if (1 >= coord || coord >= width) {
        return true;
    }
    return false;
}
bool isBoard_H(float coord) {
    if (1 >= coord || coord >= height) {
        return true;
    }
    return false;
}
 
 
int main()
{
    
    RenderWindow window(VideoMode(width, height), "Lab_1");
    CircleShape a(150.0f);
    float size = 1;
    int point = 4;
    int grad = 87;
    float move_X = cos(grad*3.1415 / 180);
    float move_Y = sin(grad*3.1415 / 180);
    float trapeze_X[4] = { 11.0*size,81.0*size, 91.0*size, 1.0*size };
    float trapeze_Y[4] = { 1.0*size, 1.0*size, 71.0*size  , 71.0*size };
    sf::ConvexShape trapeze;
    // resize it to 5 points
    trapeze.setPointCount(point);
    Vector2<float> vec;
    // define the points
    trapeze.setPoint(0, sf::Vector2f(trapeze_X[0], trapeze_Y[0]));
    trapeze.setPoint(1, sf::Vector2f(trapeze_X[1], trapeze_Y[1]));
    trapeze.setPoint(2, sf::Vector2f(trapeze_X[2], trapeze_Y[2]));
    trapeze.setPoint(3, sf::Vector2f(trapeze_X[3], trapeze_Y[3]));
    trapeze.setFillColor(Color(193, 0, 32));
 
    while (window.isOpen())
    {
 
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
                window.close();
        }
 
        if (Keyboard::isKeyPressed(Keyboard::Up)) {
            size += 0.01;
        trapeze.setScale(size,size);
        };
        if (Keyboard::isKeyPressed(Keyboard::Down)) {
            if (size > 1) {
                size -= 0.01;
                trapeze.setScale(size, size);
            }
        };
        trapeze.move(move_X,move_Y);
 
 
        for (int i = 0; i < 3; i++) {
            trapeze_X[i] += move_X;
            trapeze_Y[i] += move_Y;
            if (isBoard_W(trapeze_X[i])) {
                move_X *= -1;
            }
            if (isBoard_H(trapeze_Y[i])) {
                move_Y *= -1;
            }
        }
 
        Sleep(10);
        vec=trapeze.getPosition();
        cout << vec.x<<"  "<<vec.y<<endl;
        Sleep(10);
 
        window.clear(Color(0, 0, 0));
        window.draw( trapeze);
        window.display();
    }
 
    return 0;
}
Добавлено через 12 часов 15 минут
проблему решил, можно закрывать
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2017, 02:17
Ответы с готовыми решениями:

SFML движение под углом
Здравствуйте. Имеется шарик и платформа, шарик перемещается командой ball.move(x,y), x и y это...

Построить график тела, брошенного под углом к горизонту с автоподбором масштаба и меток
Доброго времени суток, котята. Есть приблизительный код Апостроффа, как его переделать только в...

Перемещение Shape под углом
Как сделать, что бы Shape скатился под углом(45)?

Перемещение объекта под углом
Имею окно с панелькой, где paintComponent. По идее, круг в paintComponent должен был двигаться под...

Движение фигуры под углом
Помогите, не знаю как написать чтобы фигура (например окружность) двигалась под заданным углом....

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2017, 02:17

Рисование эллипса под углом, WinApi
Всем привет, в WinApi для рисования эллипса используется функция Ellipse(), но она рисует только...

Рисование линий под углом в 45 градусов
Всё перерыл нигде нет этого а надо очень(((( помогите пожалуйста Необходимо написать программу...

Перемещение Shape по дуге и под углом
Привет всем:) Нужна помощь с шейпом) есть Shape и Timer. Не пойму что именно прописать в таймере,...


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

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

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