SFML и C++ Уроки \ Разработка игр › Форумы › Логика игр › Вращение вокруг оси.
В этой теме 3 ответа, 3 участника, последнее обновление Ajax 8 года/лет, 5 мес. назад.
Просмотр 4 сообщений - с 1 по 4 (из 4 всего)
-
АвторСообщения
-
Добрый день. У меня была задача реализовать поворот точки вокруг оси при помощи мышкой, но при повороте точка смещается в центр, и двигается не по кругу, а по спирали. Вот пример:
C++12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364#include <SFML/Graphics.hpp>#include <iostream>#include <cmath>int main(){int angle = 10;float PI = 3.14159265;float redPointX = 400, redPointY = 300;float greenPointX = 400, greenPointY = 150;sf::RenderWindow app(sf::VideoMode(800, 600), "SFML window");app.setFramerateLimit(30);sf::CircleShape shape[2];shape[0].setRadius(4);shape[1].setRadius(4);shape[0].setFillColor(sf::Color(255, 0 , 0, 255));shape[1].setFillColor(sf::Color(0, 255 , 0, 255));shape[0].setPosition(redPointX, redPointY);while (app.isOpen()){float greenX = greenPointX - redPointX;float greenY = greenPointY - redPointY;//Вращение--------------------------------------greenX = greenX * cos(angle * PI / 188) -greenY * sin(angle * PI / 180);greenY = greenX * sin(angle * PI / 180) +greenY * cos(angle * PI / 180);//----------------------------------------------greenPointX = greenX + redPointX;greenPointY = greenY + redPointY;shape[1].setPosition(greenPointX, greenPointY);std::cout<<greenPointX<<" - X\n";std::cout<<greenPointY<<" - Y\n------------------\n";sf::Event event;while (app.pollEvent(event)){if (event.type == sf::Event::Closed)app.close();}app.clear();app.draw(shape[0]);app.draw(shape[1]);app.display();}return EXIT_SUCCESS;}C++12345678910111213141516171819202122232425262728293031int main(){sf::Event evt;sf::Clock clock;sf::RenderWindow window(sf::VideoMode(800,600,32),"Test", sf::Style::Default);clock.restart();sf::RectangleShape rect1(sf::Vector2f(20,20)), rect2(sf::Vector2f(10,10));rect1.setOrigin(10,10), rect2.setOrigin(5,5);rect1.setPosition(400,300);float r = 80, a = 0, speed = 0.3; // Радиус вращения, угол, скорость.float t = 0; // Времяwhile(window.isOpen()){t = (float)clock.getElapsedTime().asMicroseconds()/1000, clock.restart();while(window.pollEvent(evt))if(evt.type == sf::Event::Closed) window.close();rect2.setPosition(rect1.getPosition().x + r * cosf(a),rect1.getPosition().y + r * sinf(a));a += PI/180*(speed*t);window.clear();window.draw(rect1);window.draw(rect2);window.display();}return 0;}привет. поковыряйся с setOrigin
Спасибо, за отзывы… Посмотрю, что с этого получится, когда появится время)
-
АвторСообщения
Просмотр 4 сообщений - с 1 по 4 (из 4 всего)
Для ответа в этой теме необходимо авторизоваться.