Bootstrap

【从头写CAD】 转换矩阵类系列四,移动矩阵类

/*
* 矩阵基本变换,移动类Move
** 编制人: $ource
* 修改版次及创建时间:0版完成版(2024年8月25日)
* 修改内容及时间:无
* 待完善问题:无
* 内容说明:移动是矩阵基本功能,实现了“组合矩阵*移动矩阵”、“移动矩阵*移动矩阵”、“移动矩阵/移动矩阵”、“移动矩阵*组合矩阵”的运算符重载。移动矩阵格式如下。
*   1    m01   m02
*   0    1     0
*   0    0     1
*/
pub type Move=Matrix<f64,f64,One,Zero,Zero,One>;
impl Move{
    pub fn new(dx:f64,dy:f64)->Move{
        Move{
            m01:dx   ,  m02:dy,
            m11:One{},  m12:Zero{},
            m21:Zero{}, m22:One{}
        }
    }
}

impl Mul<Move> for M2D{//组合矩阵*移动矩阵
    type Output = M2D;
    fn mul(self, tm:Move) ->M2D{
        M2D{
            m01:self.m01 + tm.m01,m02:self.m02+ tm.m02,
            m11:self.m11         ,m12:self.m12,
            m21:self.m21         ,m22:self.m22
        }
    }
}

impl Mul<M2D> for Move{//移动矩阵*组合矩阵
    type Output = M2D;
    fn mul(self, tm:M2D) ->M2D{
        M2D{
            m01:self.m01 * tm.m11 + self.m02 * tm.m21 + tm.m01,m02:self.m01 * tm.m12 + self.m02 * tm.m22 + tm.m02,
            m11:tm.m11                                        ,m12:tm.m12,
            m21:tm.m21                                        ,m22:tm.m22
        }
    }
}

impl Mul<Move> for Move{//移动矩阵*移动矩阵
    type Output = Move;
    fn mul(self, tm:Move) ->Move{
        Move{
            m01:self.m01 + tm.m01,m02:self.m02+ tm.m02,
            m11:One{}            ,m12:Zero{},
            m21:Zero{}           ,m22:One{}
        }
    }
}

impl Div<Move> for Move{//移动矩阵/移动矩阵
    type Output = Move;
    fn div(self, tm:Move) ->Move{
        Move{
            m01:self.m01 - tm.m01,m02:self.m02- tm.m02,
            m11:One{}            ,m12:Zero{},
            m21:Zero{}           ,m22:One{}
        }
    }
}

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;