bugün

kodlamayı ve ingilizceyi öğreten ai modelleri

matematiği sular seller gibi biliyor kerata, 2 boyutlu eğik atış hareketini ağırlık, hız, açı, boyut verileriyle simüle eden programı bir dk da kağıda döktü.
görsel

https://streamable.com/t8uc6z
#include <SFML/Graphics.hpp>
#include <cmath>
#include <sstream>
#include <iostream>

const float GRAVITY = 981.0f; // Yer çekimi ivmesi (pixel/s^2)
const float FLOOR_Y = 540.0f; // Zemin yüksekliği
const float WINDOW_WIDTH = 1920.0f; // Pencere genişliği
const float WINDOW_HEIGHT = 1080.0f; // Pencere yüksekliği

int main()
{
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "Projectile Motion");

sf::Font font;
if (!font.loadFromFile("arial.ttf"))
{
return -1;
}

sf::Text infoText;
infoText.setFont(font);
infoText.setCharacterSize(24);
infoText.setFillColor(sf::Color::White);
infoText.setPosition(10, 10);

// Başlangıç hızı, açı, kütle ve çap
float speed;
float angle;
float mass;
float diameter;

std::cout << "Enter initial speed (pixels/second): ";
std::cin >> speed;
std::cout << "Enter initial angle (degrees): ";
std::cin >> angle;
std::cout << "Enter mass of the ball (kg): ";
std::cin >> mass;
std::cout << "Enter diameter of the ball (pixels): ";
std::cin >> diameter;

// Açıyı radyana çevirme
angle = angle * 3.14159 / 180;

// Topun yarıçapını ayarlama
float radius = diameter / 2.0f;

// Kırmızı topun tanımı
sf::CircleShape redCircle(radius); // Yarıçapı kullan
redCircle.setFillColor(sf::Color::Red);
redCircle.setPosition(100.0f, FLOOR_Y - radius * 2); // Başlangıçta yukarıda

float xVelocity = speed * std::cos(angle); // Yatay hız
float yVelocity = -speed * std::sin(angle); // Dikey hız (negatif çünkü yukarı doğru)

sf::Clock clock;
bool launched = true;

// Zemin ve gökyüzü
sf::RectangleShape ground(sf::Vector2f(WINDOW_WIDTH, WINDOW_HEIGHT - FLOOR_Y));
ground.setFillColor(sf::Color::Green);
ground.setPosition(0, FLOOR_Y);

sf::RectangleShape sky(sf::Vector2f(WINDOW_WIDTH, FLOOR_Y));
sky.setFillColor(sf::Color(135, 206, 235));

while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}

float dt = clock.restart().asSeconds(); // Zaman adımı

// Eğik atış hareketi
if (launched)
{
// Kütle çekimi kuvvetini hesaplama
float gravityForce = mass * (GRAVITY / 1000.0f); // kg cinsinden yer çekimi kuvveti

// Dikey hızı güncelle
yVelocity += gravityForce * dt; // Dikey hız artar (top yere doğru hareket eder)

// Topun hareket ettirilmesi
redCircle.move(xVelocity * dt, yVelocity * dt);

// Top zemine çarptığında
if (redCircle.getPosition().y >= FLOOR_Y - radius * 2)
{
redCircle.setPosition(redCircle.getPosition().x, FLOOR_Y - radius * 2);
launched = false; // Fırlatma sona erer
}
}

// Hız ve açıyı güncelleme
float speedMagnitude = std::sqrt(xVelocity * xVelocity + yVelocity * yVelocity);

std::stringstream ss;
ss << "Speed: " << speedMagnitude << " px/s\n";
ss << "X Velocity: " << xVelocity << " px/s\n";
ss << "Y Velocity: " << yVelocity << " px/s\n";
ss << "Mass: " << mass << " kg\n";
ss << "Diameter: " << diameter << " px\n";
infoText.setString(ss.str());

// Ekranı güncelleme
window.clear();
window.draw(sky);
window.draw(ground);
window.draw(redCircle);
window.draw(infoText);
window.display();
}

return 0;
}
Gündemdeki Haberler
Güncel Önemli Başlıklar
© copyright 2005 - 2026