C# 过三点的二次贝塞尔曲线
时间: 2023-07-12 10:52:49 浏览: 196
要绘制过三点的二次贝塞尔曲线,可以使用C#中的Graphics类中的DrawBezier方法。具体步骤如下:
1. 创建一个Graphics对象,用于绘制图形。
2. 定义三个点,分别表示起始点、控制点和终止点。
3. 调用Graphics对象的DrawBezier方法,并传入四个点的坐标作为参数。
下面是一个示例代码:
```csharp
private void DrawBezier(Graphics g)
{
Point startPoint = new Point(50, 100);
Point controlPoint = new Point(100, 50);
Point endPoint = new Point(150, 100);
Pen pen = new Pen(Color.Blue, 2);
g.DrawBezier(pen, startPoint, controlPoint, endPoint);
}
```
在这个示例中,我们定义了三个点,起点为(50, 100),终点为(150, 100),控制点为(100, 50)。然后创建了一个蓝色、宽度为2的画笔,并调用Graphics对象的DrawBezier方法绘制了二次贝塞尔曲线。
这样就可以绘制过三点的二次贝塞尔曲线了。
相关问题
C# 过三点的二次贝塞尔曲线 三维坐标
要绘制过三个三维坐标点的二次贝塞尔曲线,可以使用C#中的Graphics类中的DrawBezier方法。具体步骤如下:
1. 创建一个Graphics对象,用于绘制图形。
2. 定义三个Point3D对象,分别表示起始点、控制点和终止点。
3. 调用Graphics对象的DrawBezier方法,并传入四个Point对象的坐标作为参数。
下面是一个示例代码:
```csharp
private void DrawBezier(Graphics g)
{
Point3D startPoint = new Point3D(50, 100, 0);
Point3D controlPoint = new Point3D(100, 50, 0);
Point3D endPoint = new Point3D(150, 100, 0);
Pen pen = new Pen(Color.Blue, 2);
g.DrawBezier(pen,
(int)startPoint.X, (int)startPoint.Y,
(int)controlPoint.X, (int)controlPoint.Y,
(int)endPoint.X, (int)endPoint.Y);
}
```
在这个示例中,我们定义了三个三维坐标点,起点为(50, 100, 0),终点为(150, 100, 0),控制点为(100, 50, 0)。然后创建了一个蓝色、宽度为2的画笔,并调用Graphics对象的DrawBezier方法绘制了二次贝塞尔曲线。
需要注意的是,Graphics类的DrawBezier方法只支持二维坐标,因此我们需要将三维坐标点的X和Y坐标转换为int类型。如果需要绘制三维曲线,可以考虑使用OpenGL等库来实现。
C# 在三维坐标系中 写一个过三点的二次贝塞尔曲线 详细代码
以下是 C# 中过三点的二次贝塞尔曲线的代码:
```csharp
using System;
using System.Drawing;
using System.Windows.Forms;
public partial class Form1 : Form
{
private Point[] points = new Point[3];
private Pen curvePen = new Pen(Color.Blue, 2);
private Pen pointPen = new Pen(Color.Red, 5);
public Form1()
{
InitializeComponent();
this.DoubleBuffered = true; // 双缓冲
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
for (int i = 0; i < 3; i++)
{
if (points[i].IsEmpty)
{
points[i] = e.Location;
break;
}
}
if (!points[2].IsEmpty)
{
this.Invalidate(); // 重绘
}
}
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (!points[2].IsEmpty)
{
// 计算贝塞尔曲线上的所有点
Point[] curvePoints = new Point[101];
for (int i = 0; i <= 100; i++)
{
float t = i / 100f;
float x = (1 - t) * (1 - t) * points[0].X + 2 * t * (1 - t) * points[1].X + t * t * points[2].X;
float y = (1 - t) * (1 - t) * points[0].Y + 2 * t * (1 - t) * points[1].Y + t * t * points[2].Y;
curvePoints[i] = new Point((int)x, (int)y);
}
// 绘制贝塞尔曲线和控制点
e.Graphics.DrawBezier(curvePen, points[0], points[1], points[2], curvePoints[100]);
for (int i = 0; i < 3; i++)
{
e.Graphics.DrawEllipse(pointPen, points[i].X - pointPen.Width / 2, points[i].Y - pointPen.Width / 2, pointPen.Width, pointPen.Width);
}
}
}
}
```
这个代码实现了在一个窗体上通过鼠标点击三个点,然后绘制过这三个点的二次贝塞尔曲线。在 `Form1_Paint` 方法中,我们使用 `DrawBezier` 方法绘制贝塞尔曲线,使用 `DrawEllipse` 方法绘制控制点。在 `Form1_MouseClick` 方法中,我们记录三个点的坐标,并在第三个点被记录时调用 `Invalidate` 方法重绘窗体。
阅读全文