用rust写CAD第一步:角度类,欢迎大家跟帖补充
/*
* 角度弧度的类rad
** 编制人: $ource
* 修改版次及创建时间:0版完成版(2024年8月14日)
* 修改内容及时间:无
* 待完善问题:未定义梯度(grad)属性,未检查及调整rad到(-π,π)或(0,2π)范围。暂时不需要这些属性.
*/
use std::f64::consts::PI;
use std::ops::{Add, Sub, Mul, Div};
pub const sAngleZero:Angle=0f64;
#[derive(Debug,PartialEq,PartialOrd)]
struct Angle {
rad:f64,
}
impl Angle{
//构造函数(弧度) (x,y)
fn new(rad:f64)->Angle{//建议调整到(-π,π)
Angle{rad}
}
fn new(x:f64,y:f64)->Angle{//建议调整到(-π,π)
Angle{rad:atan2(y,x)}
}
//属性 弧度 角度 x y 单位矢量
fn Radian(&self)->f64{
self.rad
}
fn setRadian(&self,rad:f64)->(){
self.rad=rad;
}
fn Degree(&self)->f64{
self.rad*(180f64/PI)
}
fn setDegree(&self,d:f64)->(){
self.rad=d*(PI/180f64);
}
fn UnitX(&self)->f64{
self.rad.Cos()
}
fn UnitY()->f64{
self.rad.Sin()
}
}
//运算符重载 + - * /,实现加减及比例缩放
impl Add for Angle{
fn add(self, other: Self) -> Self {
Self{rad:self.rad + other.rad}
}
}
impl Sub for Angle{
fn sub(self, other: Self) -> Self {
Self{rad:self.rad - other.rad}
}
}
impl Mul for Angle{
fn mul(self, scale: f64) -> Angle {
Angle{rad:self.rad * scale}
}
}
impl Div for Angle{
fn div(self, scale: f64) -> Angle {
Angle{rad:self.rad / scale}
}
}