Всем привет. У меня задание разработать движение электрона во круг атома, это должно быть как анимация. Использовал я для этого библиотеку SFML. Я вроде как реализовал, но в какой-то момент электрон уходит за экран. Потом еще я не знаю как реализовать так что бы объекта(электрон) не было видно когда он за атомом. Заранее спасибо.
Я использовал такую формулу для движения по окружности
x = x0 + radius*sin(angle);
y = y0 + radius*cos(angle);
alpha += deltaTime * k;
где x0 и у0 - это координаты центра; х, у - координаты объекта, а alpha - угол.
alpha += deltaTime * k
это изменение угла со временем.
Вот мой код:
#include "stdafx.h"
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace std;
using namespace sf;
int main()
{
float xo = 250;//координаты центра(coordinates of the center)
float yo = 250;//координаты центра(coordinates of the center)
float radius = 10;//радиус
float k = 0.0f;//время(time)
float x = 130;//координаты объекта(object coordinates)
float y = 330;//координаты объекта(object coordinates)
float rotation = 5.0;
//float x = 1000 / 2;
//float y = 1000 / 2;
float alpha = 0;//угол(angle)
float speed = 2000.0f;
RenderWindow window(sf::VideoMode(1000, 1000), "Atom");
window.setFramerateLimit(60);
Clock clock;
sf::Event windowEvent;
Texture herotexture;
herotexture.loadFromFile("atom_image.png");
Sprite herosprite;
herosprite.setTexture(herotexture);
//herosprite.setTextureRect(IntRect(0, 99, 48, 51));//получили нужный нам прямоугольник с котом
herosprite.setPosition(250, 250); //выводим спрайт в позицию x y (output the sprite to the position x y)
CircleShape circle;
circle.setRadius(radius);
circle.setOutlineColor(Color::Red);
circle.setOutlineThickness(5);
circle.setPosition(x, y);
circle.setRotation(0);
while (window.isOpen())
{
Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
//circle.rotate(rotation);
//alpha = (float)clock.getElapsedTime().asMicroseconds() * k;
clock.restart();
k = k / 800;
float deltaTime = clock.restart().asSeconds();
alpha += deltaTime*(float)clock.getElapsedTime().asSeconds();
float Radius = (float)herosprite.getPosition().x - (float)circle.getPosition().x;
cout << "\nGet Position Atom is -> " << (float)herosprite.getPosition().x << endl;
cout << "\nGet Position Circle is -> " << (float)circle.getPosition().x << endl;
cout << "\nRadius is -> " << Radius << endl;
x = xo + Radius*sin(alpha);//формула для движения по окружности(formula for motion along a circle)
y = yo + Radius*cos(alpha);//формула для движения по окружности(formula for motion along a circle)
Vector2f direction(x, y);
circle.move(direction * deltaTime * speed);
//circle.move(direction);
//circle.move(x, y);
window.clear();
window.draw(herosprite);
window.draw(circle);
window.display();
}
return 0;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как в QML нарисовать полукруг и применить по нему маску прозрачности? имеется изображение, от которого нужно рисовать только его часть - (полукруг...
В c++ builder есть простая форма, где пользователь может выбрать 7z архивНеобходимо по нажатию кнопки изменить определённый файле в выбранном...
На целевой системе программа вылетает при некоторых входных данных с exit кодом 134 (SIGABORT)Возможности запустить под отладчиком нет