Python – die neusten Beiträge

Stimmt diese Planetenlaufbahn-Approximation?

Heyy ich versuche seit einiger Zeit mit Python eine Animation für die Laufbahn von der Erde zu erstellen, aber ich wundere mich, ob mein Ansatz stimmt. 🤔

Ich will ein Python Programm erstellen, wo ich den Exponenten des Radius im Gravitationsgesetz ändern und somit neue Umlaufbahnen zeichnen kann. Dabei stütze ich mich auf die Formel: F = G * (m1 * m2)/r^x. Ich bin mir nicht sicher, ob mein Programm korrekte Laufbahnen zeichnet, da ich nicht sonderlich gut in Physik bin. Der Grundgedanke kann ich nachvollziehen: Bei abnehmender Kraft, wird die Umlaufbahn grösser. Aber ist es normal, dass die Umlaufbahn der Erde bei einer kleinen Exponenten-Änderung von 2 auf 2.02 so viel grösser wird? Falls ja, warum ist das so?

Danke im Voraus für eure Hilfe! 😊

LG Leonie

Ein Quadrat entspricht hier einer astronomischen Einheit.

Hier ist mein Programm:

Ich verwende für meine Animation pygame.

import pygame
import sys
import math

Das sind die Konstanten, die ich verwende und die Startwerte:

G = 6.67430e-11
M_SUN = 1.989e30 
M_EARTH = 5.972e24
AU = 1.496e11
TIME_STEP = 43200
x = AU
y = 0
vx = 0
vy = 29780
exp_r = float(input"Exponent:"))

Die Erstellung des Fensters:

pygame.init()
WIDTH, HEIGHT = 800, 800
SCALE = WIDTH / (20 * AU)  # Maßstab für die Darstellung
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()

Mit RK4 approximiere ich die Laufbahn der Erde. Hier sind die Funktionen:

def runge_kutta4(t, state, dt):
    k1 = deriv(t, state)
    k2 = deriv(t + 0.5 * dt, [state[i] + 0.5 * dt * k1[i] for i in range(4)])
    k3 = deriv(t + 0.5 * dt, [state[i] + 0.5 * dt * k2[i] for i in range(4)])
    k4 = deriv(t + dt, [state[i] + dt * k3[i] for i in range(4)])
    return [state[i] + (dt / 6) * (k1[i] + 2 * k2[i] + 2 * k3[i] + k4[i]) for i in range(4)]

def draw_grid():
    grid_size = AU * SCALE
    half_width = WIDTH // 2
    half_height = HEIGHT // 2
 
    for i in range(-19, 20):
        x_pos = int(half_width + i * grid_size)
        pygame.draw.line(screen, (50, 50, 50), (x_pos, 0), (x_pos, HEIGHT))
 
    for i in range(-19, 20):
        y_pos = int(half_height + i * grid_size)
        pygame.draw.line(screen, (50, 50, 50), (0, y_pos), (WIDTH, y_pos))

Hauptschleife:

running = True
t = 0
earth_path = []


while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    state = [x, y, vx, vy]
    x, y, vx, vy = runge_kutta4(t, state, TIME_STEP)
    t += TIME_STEP

    draw_x = int(WIDTH / 2 + x * SCALE)
    draw_y = int(HEIGHT / 2 + y * SCALE)
    earth_path.append((draw_x, draw_y))

    screen.fill((0, 0, 0))
    draw_grid()
    pygame.draw.circle(screen, (255, 255, 0), (WIDTH // 2, HEIGHT // 2), 20)
    pygame.draw.circle(screen, (0, 0, 255), (draw_x, draw_y), 5)

    for px, py in earth_path:
        pygame.draw.circle(screen, (0, 255, 0), (px, py), 1)

    pygame.display.flip()
    clock.tick(60)

pygame.quit()
sys.exit()
Bild zum Beitrag
Erde, Schule, Mathematik, programmieren, Astronomie, Code, Gravitation, Informatik, Physik, Programmiersprache, Python, Universität, Approximation, Gravitationskraft, Newtonsche Gesetze, Pygame, Gravitationsgesetz

Bitget Order Bot?

Moin, ich möchte gerne einen python Bot bauen, welcher für mich Future Postionen auf Bitget eröffnet.
Ich bekomme nur leider immer den gleichen fehler und weiß nicht wie ich das umgehen soll. Kann mir da jemand weiterhelfen?
Fehler:
Versuch 1 von 10...

Fehler beim Platzieren der Order:

{
  "code": "40009",
  "msg": "sign signature error",
  "requestTime" :1738611623938,
  "data": null
}

Warte 30 Sekunden vor dem nächsten Versuch...

Code:

import requests
import time
import hmac
import hashlib
import configparser
import json
# Lade die Konfiguration aus der config.ini Datei
config = configparser.ConfigParser()
config.read('config.ini')
api_key = config['bitget']['api_key']
secret_key = config['bitget']['secret_key']
passphrase = config['bitget']['passphrase']
# Bitget API Endpoints
BASE_URL = 'https://api.bitget.com'
END_POINT = '/api/mix/v1/order/placeOrder'
# Funktion zur Generierung der Signatur
def generate_signature(secret_key, message):
  return hmac.new(secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256).hexdigest()
# Funktion zur Erstellung der Headers
def create_headers(api_key, secret_key, passphrase, request_path, body):
  timestamp = str(int(time.time() * 1000))
  message = timestamp + request_path + json.dumps(body, separators=(',', ':')) # Wichtig: Keine Leerzeichen im JSON
  signature = generate_signature(secret_key, message)
  headers = {
    'Content-Type': 'application/json',
    'ACCESS-KEY': api_key,
    'ACCESS-SIGN': signature,
    'ACCESS-TIMESTAMP': timestamp,
    'ACCESS-PASSPHRASE': passphrase
  }
  return headers
# Funktion zum Kauf von Bitcoin im Futures-Markt
def buy_bitcoin_futures(amount_usdt):
  request_path = END_POINT
  body = {
    "symbol": "BTCUSDT_UMCBL",
    "marginCoin": "USDT",
    "side": "open_long",
    "orderType": "market",
    "price": "0",
    "size": str(amount_usdt),
    "timeInForce": "normal"
  }
  headers = create_headers(api_key, secret_key, passphrase, request_path, body)
   
  response = requests.post(BASE_URL + request_path, headers=headers, json=body)
   
  if response.status_code == 200:
    print("Order erfolgreich platziert:", response.json())
    return True # Erfolg
  else:
    print("Fehler beim Platzieren der Order:", response.text)
    return False # Fehler
# Hauptfunktion
if __name__ == "__main__":
  amount_usdt = 5 # 5 USDT
  max_retries = 10 # Maximale Anzahl von Versuchen
  retry_delay = 30 # Verzögerung zwischen den Versuchen in Sekunden
  for attempt in range(max_retries):
    print(f"Versuch {attempt + 1} von {max_retries}...")
    success = buy_bitcoin_futures(amount_usdt)
     
    if success:
      break # Erfolg, Schleife beenden
    else:
      print(f"Warte {retry_delay} Sekunden vor dem nächsten Versuch...")
      time.sleep(retry_delay) # Warte 30 Sekunden
  if not success:
    print("Maximale Anzahl von Versuchen erreicht. Order konnte nicht platziert werden.")
Bot, Code, Programmiersprache, Python, Python 3, Bitget

Meistgelesene Beiträge zum Thema Python