首页 > 解决方案 > c#变换直线方程以改变参考原点和角度

问题描述

假设我有以下情况。我有一个y=mx+q形式的直线方程,指的是xOy平原。我需要将线方程转换为x'O'y'平原。您将如何以有效的方式进行?

我应该补充一点,我知道两个原点的坐标和旋转指的是一个完全笔直的参考平面,可以看作是绘制原点的纸。 在此处输入图像描述

标签: c#geometry

解决方案


考虑到激光是我对这条线的参考点,我做了如下:

private Model RotoTranslate(Model line, LaserContainer laser)
{
    Model transformModel = new Model();
    float cosA = (float)Math.Cos((laser.Rotation * Math.PI) / 180.0f);
    float sinA = (float)Math.Sin((laser.Rotation * Math.PI) / 180.0f);

    if (line.XModel)
    {
        transformModel.XModel = true;
        transformModel.M = ((line.M * cosA) - sinA) / ((line.M * sinA) + cosA);
        transformModel.Q = (line.Q + (laser.PositionGraph.Y * ((line.M * sinA) + cosA)) -
                           (laser.PositionGraph.X * ((line.M * cosA) - sinA))) / ((line.M * sinA) + cosA);
    }
    else
    {
        transformModel.XModel = false;
        transformModel.M = ((line.M * cosA) + sinA) / (-(line.M * sinA) + cosA);
        transformModel.Q = (line.Q + (laser.PositionGraph.X * (-(line.M * sinA) + cosA)) -
                           (laser.PositionGraph.Y * ((line.M * cosA) + sinA))) / (-(line.M * sinA) + cosA);
    }

    return transformModel;
}

我现在必须测试一下,看看是否有我没有考虑到的异常...... XModel的定义本质上是指线方程的表达方式。如果模型有:

 XModel = true;

那么方程的形式是y=mx+q,否则它的形式是x=my+q


推荐阅读