Menu
Coddy logo textTech

Zusammenfassung - Koordinatenpunkt

Teil des Abschnitts Object Oriented Programming der Rust-Journey von Coddy — Lektion 28 von 61.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein flexibles Koordinatensystem bauen, das mit jedem numerischen Typ funktioniert! Sie werden eine generische Point-Struktur erstellen, die Positionen mit Ganzzahlen für rasterbasierte Spiele oder Fließkommazahlen für präzise Grafiken darstellen kann – alles aus einer einzigen Definition.

Sie werden Ihren Code auf zwei Dateien aufteilen:

  • point.rs: Definieren Sie eine öffentliche generische Point<T>-Struktur mit zwei öffentlichen Feldern: x und y, beide vom Typ T. Implementieren Sie Methoden für Ihren Punkt:
    • Eine assoziierte Funktion new, die einen Punkt aus x- und y-Koordinaten erstellt
    • Eine translate-Methode, die dx- und dy-Werte entgegennimmt und einen neuen Point zurückgibt, dessen Koordinaten um diese Beträge verschoben sind (dies erfordert, dass T Addition und Kopieren unterstützt, verwenden Sie daher den Bound T: std::ops::Add<Output = T> + Copy)
  • main.rs: Binden Sie Ihr Punkt-Modul ein und demonstrieren Sie, wie dieselbe generische Struktur nahtlos mit verschiedenen numerischen Typen funktioniert.

In Ihrer Hauptdatei präsentieren Sie Ihren generischen Point, indem Sie:

  1. Einen Integer-Punkt unter Verwendung der ersten beiden Eingaben erstellen (geparst als i32)
  2. Ihn um die dritte und vierte Eingabe verschieben (ebenfalls i32)
  3. Einen Fließkomma-Punkt unter Verwendung der fünften und sechsten Eingabe erstellen (geparst als f64)
  4. Alle drei Punkte anzeigen

Ihre Ausgabe sollte diesem Format folgen:

Integer point: ({x}, {y})
After translation: ({x}, {y})
Float point: ({x}, {y})

Zum Beispiel mit den Eingaben 3, 5, 2, -1, 1.5 und 2.5:

Integer point: (3, 5)
After translation: (5, 4)
Float point: (1.5, 2.5)

Beachten Sie, wie Point::new(3, 5) einen Point<i32> erstellt, während Point::new(1.5, 2.5) einen Point<f64> erstellt – dieselbe Strukturdefinition passt sich an beides an!

Sie erhalten sechs Eingaben: zwei Ganzzahlen für den ersten Punkt, zwei Ganzzahlen für die Verschiebung und zwei Fließkommazahlen für den zweiten Punkt.

Probier es selbst

mod point;

use point::Point;

fn main() {
    // Eingaben lesen
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let x1: i32 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y1: i32 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let dx: i32 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let dy: i32 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let x2: f64 = input.trim().parse().expect("Invalid input");
    
    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y2: f64 = input.trim().parse().expect("Invalid input");
    
    // TODO: Erstelle einen Integer-Punkt mit x1 und y1
    
    // TODO: Verschiebe den Integer-Punkt um dx und dy
    
    // TODO: Erstelle einen Fließkomma-Punkt mit x2 und y2
    
    // TODO: Gib die Ergebnisse im erforderlichen Format aus:
    // println!("Integer point: ({}, {})", ...);
    // println!("After translation: ({}, {})", ...);
    // println!("Float point: ({}, {})", ...);
}

Alle Lektionen in Object Oriented Programming