C# 围绕另一个点和X轴旋转点

C# 围绕另一个点和X轴旋转点,c#,math,drawing,2d,point,C#,Math,Drawing,2d,Point,我有一个创建曲线的点阵列。然后我创建另外两个数组:左和右,它们应该是我的中间曲线的边界(它们只被+/-x’s修改),如下所示: 最后,我希望有这样的东西: 我试着围绕中心点左右旋转(从红线开始),但对我来说效果不好 static Point Rotate(Point p, Point o, double theta) { Point rotated = new Point(); double x = Math.Cos(theta) * (p.X - o

我有一个创建曲线的点阵列。然后我创建另外两个数组:左和右,它们应该是我的中间曲线的边界(它们只被+/-x’s修改),如下所示:

最后,我希望有这样的东西:

我试着围绕中心点左右旋转(从红线开始),但对我来说效果不好

static Point Rotate(Point p, Point o, double theta)
    {
        Point rotated = new Point();
        double x = Math.Cos(theta) * (p.X - o.X) - Math.Sin(theta) * (p.Y - o.Y) + o.X;
        rotated.X = (int)Math.Round(x);
        double y = Math.Sin(theta) * (p.X - o.X) + Math.Cos(theta) * (p.Y - o.Y) + o.Y;
        rotated.Y = (int)Math.Round(y);
        return rotated;
    }
我从红线数点之间的角度

float xDiff = finalList[finalList.IndexOf(row) + 1][0].x - point.toPoint().X;
float yDiff = finalList[finalList.IndexOf(row) + 1][0].y - point.toPoint().Y;
angle = Math.Atan2(yDiff, xDiff)  * 180.0 / Math.PI;
angle = Math.Abs(angle) -  90d;
结果:

如何正确获取左右点阵列?也许有另一种方法可以用可定制的边界绘制曲线?我需要这个来画图表。任何帮助都将不胜感激:)

编辑:我得到的角度似乎还可以,在线条底部大约10度,然后上升到大约50度,然后又下降,所以我认为问题在于旋转本身。

我已经做了这些。我在一条3d线周围创建了一个管状体

我使用的方法是:

将每个点(红线)视为从当前点到下一点的向量。黑线上的点与该向量垂直。(请参见下图)这样可以在黑线上生成点。不涉及轮换

我添加了一个图像,以可视化我的解决方案。红色箭头是当前点和下一点的初始向量。黑色箭头显示生成的平行向量。蓝色箭头是红色箭头上的垂直矢量。垂直向量的长度可用于缩小“平行”线

要计算垂直向量,请使用



对于我的解决方案,我计算了当前/下一个矢量3d的垂直平面上的2d圆点(因此它们变为3d)。对每个点重复该操作,并以相同角度将圆点连接到其他圆点和创建的面。圆的半径用来使管子更宽或更窄

看起来您正在尝试执行平移而不是旋转?否则,如果可以更改图层和线宽,则可以将黑线的宽度设置为红线的两倍,然后在相同的点上绘制黑线和红线。这样,红色的两边都会有一点黑色。我不能这样做,例如,红线的颜色可以设置为半透明。这非常有用!我将尝试实现这一点。