我有一个包含点的数组,用来创建曲线。然后我创建了另外两个数组:左边和右边,它们应该是我的中间曲线的边界(只通过 +/- x 进行修改),就像这样:
最终我想要的是像这样的东西:我尝试通过围绕中心点(红线)旋转左右点来实现,但对我来说效果不佳。
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度再次下降,所以我认为问题在于旋转本身。