Menu
Coddy logo textTech

요약 - 좌표 지점

Coddy Rust 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 28번째.

challenge icon

챌린지

쉬움

어떤 숫자 타입과도 호환되는 유연한 좌표 시스템을 만들어 봅시다! 단일 정의만으로 그리드 기반 게임을 위한 정수 좌표나 정밀한 그래픽을 위한 부동 소수점 좌표를 모두 표현할 수 있는 제네릭 Point 구조체를 만들게 됩니다.

코드는 두 개의 파일로 구성됩니다:

  • point.rs: 두 개의 공개 필드 xy(모두 T 타입)를 가진 공개 제네릭 Point<T> 구조체를 정의합니다. 포인트에 대한 메서드를 구현하세요:
    • x와 y 좌표로부터 포인트를 생성하는 new 연관 함수
    • dx와 dy 값을 받아 해당 양만큼 이동된 좌표를 가진 새로운 Point를 반환하는 translate 메서드 (이를 위해서는 T가 덧셈과 복사를 지원해야 하므로, T: std::ops::Add<Output = T> + Copy 트레이트 바운드를 사용하세요)
  • main.rs: point 모듈을 가져와서 동일한 제네릭 구조체가 서로 다른 숫자 타입과 어떻게 원활하게 작동하는지 보여줍니다.

메인 파일에서 다음을 통해 제네릭 Point를 시연하세요:

  1. 처음 두 개의 입력값(i32로 파싱됨)을 사용하여 정수 포인트를 생성합니다.
  2. 세 번째와 네 번째 입력값(마찬가지로 i32)을 사용하여 이를 이동(translate)시킵니다.
  3. 다섯 번째와 여섯 번째 입력값(f64로 파싱됨)을 사용하여 부동 소수점 포인트를 생성합니다.
  4. 세 포인트 모두를 출력합니다.

출력은 다음 형식을 따라야 합니다:

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

예를 들어, 입력값이 3, 5, 2, -1, 1.5, 2.5인 경우:

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

Point::new(3, 5)Point<i32>를 생성하는 반면, Point::new(1.5, 2.5)Point<f64>를 생성하는 것을 확인해 보세요. 동일한 구조체 정의가 두 경우 모두에 적응합니다!

여섯 개의 입력을 받게 됩니다: 첫 번째 포인트를 위한 두 개의 정수, 이동을 위한 두 개의 정수, 그리고 두 번째 포인트를 위한 두 개의 부동 소수점 수입니다.

직접 해보기

mod point;

use point::Point;

fn main() {
    // 입력 읽기
    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: x1과 y1을 사용하여 정수형 포인트를 생성하세요
    
    // TODO: 정수형 포인트를 dx와 dy만큼 이동(translate)시키세요
    
    // TODO: x2와 y2를 사용하여 부동 소수점형 포인트를 생성하세요
    
    // TODO: 요구된 형식으로 결과를 출력하세요:
    // println!("Integer point: ({}, {})", ...);
    // println!("After translation: ({}, {})", ...);
    // println!("Float point: ({}, {})", ...);
}

Object Oriented Programming의 모든 레슨