Özet - Koordinat Noktası
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 28 / 61.
Görev
KolayHerhangi bir sayısal türle çalışan esnek bir koordinat sistemi oluşturalım! Izgara tabanlı oyunlar için tamsayıları veya hassas grafikler için kayan noktalı sayıları kullanarak konumları temsil edebilen genel bir Point yapısı oluşturacaksınız: hepsi tek bir tanımdan.
Kodunuzu iki dosya arasında düzenleyeceksiniz:
point.rs: İki genelPoint<T>yapısını tanımlayın. Yapınınxveyadında, her ikisi deTtüründe olan iki ortak alanı olmalıdır. Noktanız için metotlar uygulayın:- x ve y koordinatlarından bir nokta oluşturan bir
newilişkili işlevi - dx ve dy değerlerini alan ve koordinatları bu miktarlarda kaydırılmış yeni bir
translatedöndüren birPointmetodu (bunun içinTtürünün toplama ve kopyalama işlemlerini desteklemesi gerekir; bu nedenleT: std::ops::Add<Output = T> + Copysınırını kullanın)
- x ve y koordinatlarından bir nokta oluşturan bir
main.rs: Nokta modülünüzü içe aktarın ve aynı genel yapının farklı sayısal türlerle nasıl sorunsuz çalıştığını gösterin.
Ana dosyanızda genel Point yapınızı şu işlemlerle gösterin:
- İlk iki girdiyi (
i32olarak ayrıştırılmış) kullanarak bir tamsayı noktası oluşturma - Bu noktayı üçüncü ve dördüncü girdilerle (bunlar da
i32) kaydırma - Beşinci ve altıncı girdileri (
f64olarak ayrıştırılmış) kullanarak kayan noktalı bir nokta oluşturma - Üç noktanın tamamını görüntüleme
Çıktınız şu biçimi izlemelidir:
Integer point: ({x}, {y})
After translation: ({x}, {y})
Float point: ({x}, {y})Örneğin girdiler 3, 5, 2, -1, 1.5 ve 2.5 olduğunda:
Integer point: (3, 5)
After translation: (5, 4)
Float point: (1.5, 2.5)Point::new(3, 5) ifadesinin bir Point<i32> oluştururken Point::new(1.5, 2.5) ifadesinin bir Point<f64> oluşturduğuna dikkat edin: aynı yapı tanımı her ikisine de uyum sağlar!
Altı girdi alacaksınız: ilk nokta için iki tamsayı, öteleme için iki tamsayı ve ikinci nokta için iki kayan noktalı sayı.
Kendin dene
mod point;
use point::Point;
fn main() {
// Girdileri oku
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: Create an integer point using x1 and y1
// TODO: Translate the integer point by dx and dy
// TODO: x2 ve y2 kullanarak bir kayan noktalı nokta oluştur
// TODO: Sonuçları gerekli formatta yazdır:
// println!("Integer point: ({}, {})", ...);
// println!("After translation: ({}, {})", ...);
// println!("Float point: ({}, {})", ...);
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Metotlar ve Davranış
Uygulama Bloklarına GirişSelf ParametresiDeğiştirilebilir Metotlarİlişkili FonksiyonlarBirden Fazla Uygulama BloğuMetot ZincirlemeÖzet - Dikdörtgen Eylemleri4Proje: Sanal Evcil Hayvan
Evcil Hayvanı TanımlamaEvcil Hayvanı Besleme2Kapsülleme ve Modüller
Modül TemelleriPublic Anahtar KelimesiPrivate AlanlarGetter'larSetter'larÖzet - Güvenli Kasa5Generic Yapılar
Generic Struct'larGeneric MetotlarÇoklu Generic TürlerGeneric FonksiyonlarÖzet - Koordinat Noktası8Sınırlandırıcı Olarak Trait'ler
Trait Sınırlandırıcı SözdizimiÇoklu SınırlandırıcılarWhere CümleciğiTrait'ler ile Tip DöndürmeÖzet - Generic Yazıcı11Rust'ta Tasarım Kalıpları
Newtype KalıbıKompozisyonDrop Trait'iFrom ve IntoÖzet - Smart Pointer Mock3İleri Seviye Enum'lar
Veri İçeren Enum'larEnum MetotlarıVeri Varyantlarını EşlemeOption Enum'ına Yeniden BakışÖzet - Shape Enum6Trait Tanımlama
Trait Nedir?Traitleri UygulamaVarsayılan UygulamalarVarsayılanları Geçersiz KılmaParametreli TraitlerÖzet - Media PlayerKendi başına pratik yap: Online Rust derleyicisi