angle sin cos

This commit is contained in:
Quaternions 2024-09-18 15:21:54 -07:00
parent 83b948200c
commit f4903abd33

View File

@ -413,18 +413,31 @@ impl Angle32{
.wrapping_add(midpoint) .wrapping_add(midpoint)
) )
} }
#[inline]
pub fn cos_sin(&self)->(Planar64,Planar64){
/* /*
#[inline] //cordic
pub fn cos(&self)->Unit32{ let a=self.0 as u32;
//TODO: fix this rounding towards 0 //initialize based on the quadrant
Unit32(unsafe{((self.0 as f64*ANGLE32_TO_FLOAT64_RADIANS).cos()*UNIT32_ONE_FLOAT64).to_int_unchecked()}) let (mut x,mut y)=match (a&(1<<31)!=0,a&(1<<30)!=0){
(false,false)=>( 1i64<<32, 0i64 ),//TR
(false,true )=>( 0i64 , 1i64<<32),//TL
(true ,false)=>(-1i64<<32, 0i64 ),//BL
(true ,true )=>( 0i64 ,-1i64<<32),//BR
};
println!("x={} y={}",Planar64::raw(x),Planar64::raw(y));
for i in 0..30{
if a&(1<<(29-i))!=0{
(x,y)=(x-(y>>i),y+(x>>i));
} }
#[inline] println!("i={i} t={} x={} y={}",(a&(1<<(29-i))!=0) as u8,Planar64::raw(x),Planar64::raw(y));
pub fn sin(&self)->Unit32{
//TODO: fix this rounding towards 0
Unit32(unsafe{((self.0 as f64*ANGLE32_TO_FLOAT64_RADIANS).sin()*UNIT32_ONE_FLOAT64).to_int_unchecked()})
} }
//don't forget the gain
(Planar64::raw(x),Planar64::raw(y))
*/ */
let (s,c)=(self.0 as f64*Self::ANGLE32_TO_FLOAT64_RADIANS).sin_cos();
(Planar64::raw((c*((1u64<<32) as f64)) as i64),Planar64::raw((s*((1u64<<32) as f64)) as i64))
}
} }
impl Into<f32> for Angle32{ impl Into<f32> for Angle32{
#[inline] #[inline]