Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
104
Task/Vector/Rust/vector.rust
Normal file
104
Task/Vector/Rust/vector.rust
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
use std::fmt;
|
||||
use std::ops::{Add, Div, Mul, Sub};
|
||||
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
pub struct Vector<T> {
|
||||
pub x: T,
|
||||
pub y: T,
|
||||
}
|
||||
|
||||
impl<T> fmt::Display for Vector<T>
|
||||
where
|
||||
T: fmt::Display,
|
||||
{
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
if let Some(prec) = f.precision() {
|
||||
write!(f, "[{:.*}, {:.*}]", prec, self.x, prec, self.y)
|
||||
} else {
|
||||
write!(f, "[{}, {}]", self.x, self.y)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Vector<T> {
|
||||
pub fn new(x: T, y: T) -> Self {
|
||||
Vector { x, y }
|
||||
}
|
||||
}
|
||||
|
||||
impl Vector<f64> {
|
||||
pub fn from_polar(r: f64, theta: f64) -> Self {
|
||||
Vector {
|
||||
x: r * theta.cos(),
|
||||
y: r * theta.sin(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Add for Vector<T>
|
||||
where
|
||||
T: Add<Output = T>,
|
||||
{
|
||||
type Output = Self;
|
||||
|
||||
fn add(self, other: Self) -> Self::Output {
|
||||
Vector {
|
||||
x: self.x + other.x,
|
||||
y: self.y + other.y,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Sub for Vector<T>
|
||||
where
|
||||
T: Sub<Output = T>,
|
||||
{
|
||||
type Output = Self;
|
||||
|
||||
fn sub(self, other: Self) -> Self::Output {
|
||||
Vector {
|
||||
x: self.x - other.x,
|
||||
y: self.y - other.y,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Mul<T> for Vector<T>
|
||||
where
|
||||
T: Mul<Output = T> + Copy,
|
||||
{
|
||||
type Output = Self;
|
||||
|
||||
fn mul(self, scalar: T) -> Self::Output {
|
||||
Vector {
|
||||
x: self.x * scalar,
|
||||
y: self.y * scalar,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Div<T> for Vector<T>
|
||||
where
|
||||
T: Div<Output = T> + Copy,
|
||||
{
|
||||
type Output = Self;
|
||||
|
||||
fn div(self, scalar: T) -> Self::Output {
|
||||
Vector {
|
||||
x: self.x / scalar,
|
||||
y: self.y / scalar,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
use std::f64::consts::FRAC_PI_3;
|
||||
|
||||
println!("{:?}", Vector::new(4, 5));
|
||||
println!("{:.4}", Vector::from_polar(3.0, FRAC_PI_3));
|
||||
println!("{}", Vector::new(2, 3) + Vector::new(4, 6));
|
||||
println!("{:.4}", Vector::new(5.6, 1.3) - Vector::new(4.2, 6.1));
|
||||
println!("{:.4}", Vector::new(3.0, 4.2) * 2.3);
|
||||
println!("{:.4}", Vector::new(3.0, 4.2) / 2.3);
|
||||
println!("{}", Vector::new(3, 4) / 2);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue