不对,c2,c3值相同了
时间: 2024-04-14 14:30:41 浏览: 13
抱歉,我犯了一个错误。在计算 c2 的代码中,应该使用 k2 的坐标而不是 k1 的坐标。以下是修正后的代码:
```csharp
using System;
using System.Drawing;
public class BezierCurve
{
public PointF[] CalculateControlPoints(PointF k0, PointF k1, PointF k2, PointF c0, PointF c3)
{
// 计算 c1 坐标
PointF c1 = new PointF();
c1.X = 2 * k1.X - (c0.X + c3.X) / 2;
c1.Y = 2 * k1.Y - (c0.Y + c3.Y) / 2;
// 计算 c2 坐标
PointF c2 = new PointF();
c2.X = 2 * k2.X - (c0.X + c3.X) / 2;
c2.Y = 2 * k2.Y - (c0.Y + c3.Y) / 2;
return new PointF[] { c1, c2 };
}
}
public class Program
{
public static void Main()
{
BezierCurve bezierCurve = new BezierCurve();
PointF k0 = new PointF(0, 0);
PointF k1 = new PointF(1, 1);
PointF k2 = new PointF(2, 2);
PointF c0 = new PointF(0, 1);
PointF c3 = new PointF(2, 1);
PointF[] controlPoints = bezierCurve.CalculateControlPoints(k0, k1, k2, c0, c3);
Console.WriteLine("c1 坐标:({0}, {1})", controlPoints[0].X, controlPoints[0].Y);
Console.WriteLine("c2 坐标:({0}, {1})", controlPoints[1].X, controlPoints[1].Y);
}
}
```
现在,计算出的 c1 和 c2 的坐标应该是正确的了。