在重绘线条时获得适当的角度问题

时间:2018-01-17 16:15:06

标签: c# math drawing angle

我有一系列父系和子系,我试图正确地重绘。

直到最近,当两个45度角开始无法正确翻译时,我的代码工作得非常好。在第一种情况下,我进行了调试,发现它需要为135,而在第二种情况下,它需要为180(由于绘制方向,不能为0)

我如何获得两条线之间的角度是

double theta1 = Math.Atan2(child.OriginalPoints.First().Y - child.OriginalPoints.Last().Y, child.OriginalPoints.First().X - child.OriginalPoints.Last().X);
        double theta2 = Math.Atan2(Parent.OriginalPoints.First().Y - Parent.OriginalPoints.Last().Y, Parent.OriginalPoints.First().X - Parent.OriginalPoints.Last().X);
        double diff = Math.Abs(theta1 - theta2);

        diff = (diff * 180) / Math.PI;

        double div = diff / roundTo;
        diff = roundTo * Math.Round(div, 0);

        if ((new List<double>() { 180, 360 }).Contains(Math.Abs(diff)))
        {
            diff = 0;
        }

        return diff;

然后创建表示我的线的新点我将当前角度转换为父减去prevAngle,使其正确旋转,然后使用前一行端点,当前行的长度和一些数学来获取端点。

 double angle = line.AngleToParent - Math.Abs(prevAngle);

        double radians = angle * Math.PI / 180;
        line.EndPoint.X = (line.Length * Math.Cos(radians)) + line.StartPoint.X;
        line.EndPoint.Y = (line.Length * Math.Sin(radians)) + line.StartPoint.Y; 

直到上述两个角度一直在努力。第一个是45-180 = -135,下一个一个是45-135 == -90。

请告诉我,如果你能看到我的逻辑中存在的缺陷,即在不弄乱其他行的情况下正确地进行翻译。

谢谢,

1 个答案:

答案 0 :(得分:0)

经过两天的团队和我追逐它,我们发现了它。

我们改为

double theta1 = Math.Atan2(child.OriginalPoints.First().Y - child.OriginalPoints.Last().Y, child.OriginalPoints.First().X - child.OriginalPoints.Last().X);
    double theta2 = Math.Atan2(Parent.OriginalPoints.First().Y - Parent.OriginalPoints.Last().Y, Parent.OriginalPoints.First().X - Parent.OriginalPoints.Last().X);
    double diff = theta1 - theta2;

    diff = (diff * 180) / Math.PI;

然后添加

if (line.AngleToParent < 0)
        {
            line.AngleToParent += 360;

        }

现在按预期绘制所有内容。即使我们改变了起始角度。希望这能节省一些时间。