请问:比如已知10个点坐标乃至更多,(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5),(x6,y6),(x7,y7),(x8,y8),(x9,y9),(x10,y10),怎样画这条曲线。有没有这个功能的函数,是哪个?请教!!!
解决方案 »
- 我做的将EXCEL数据与ACCESS数据比较
- 如何实现类似超级终端的功能(Delphi)
- 处理Text文件问题?直接读取Text文件到某行后要把前面的记录删除掉,剩下的记录移到第一行开始怎么写?
- 恳请赐教,dbgrid指针问题,我急等
- 无状态的ClientDataSet修改后怎样保存更新?
- 用TWebBrowser.Navigate('c:\123.xls')打开后,如何用程序实现在Sheet间的跳转?
- 请问各位大哥,怎样用程序把 html文件 编译为 chm文件 ?
- 关于datetimepicer的问题!
- 简单问题,白送分了.请ActiveX控件是什么呢?
- 究竟该如何对时间型的字段做日期的动态查询??
- 请问:如果我要把表中符合要求的记录,逐条添加到Listbox中,下面我的写法错在哪里了呢?
- 请DELPHI 高手过目, 帮忙指教
GDI+ 支持多种类型的曲线:椭圆、弧形、基数样条和贝塞尔样条。椭圆是由其边界矩形定义的;弧是椭圆的一部分,由一个起始角和一个扫描角定义。基数样条由一系列点和张力参数定义,即曲线平滑地通过系列中的每个点,张力参数影响曲线的弯曲方式。贝塞尔样条由两个端点和两个控制点定义,即该曲线不通过控制点,但是控制点影响曲线从一个端点到另一个端点时的方向和弯曲程度。
绘制基数样条曲线
基数样条是平滑通过一组给定点的曲线。若要绘制基数样条,请创建 Graphics 对象并将一个点的数组的地址传递给 DrawCurve 方法。下面的示例绘制了一条通过五个指定点的钟形基数样条。
Point points[] = {Point(0, 100),
Point(50, 80),
Point(100, 20),
Point(150, 80),
Point(200, 100)};Pen pen(Color(255, 0, 0, 255));
graphics.DrawCurve(&pen, points, 5);
下面的插图显示该曲线和五个点。
使用 Graphics 类的 DrawClosedCurve 方法可绘制闭合的基数样条。在闭合的基数样条中,曲线连续通过序列中最后一个点,并与序列中的第一个点连接。
下面的示例绘制了一条通过六个指定点的闭合的基数样条。
Point points[] = {Point(60, 60),
Point(150, 80),
Point(200, 40),
Point(180, 120),
Point(120, 100),
Point(80, 160)};Pen pen(Color(255, 0, 0, 255));
graphics.DrawClosedCurve(&pen, points, 6);
下面的插图显示闭合的样条和六个点。
通过将张力参数传递给 DrawCurve 方法,可更改基数样条的弯曲方式。下面的示例绘制了三条通过同一组点的基数样条。
Point points[] = {Point(20, 50),
Point(100, 10),
Point(200, 100),
Point(300, 50),
Point(400, 80)};Pen pen(Color(255, 0, 0, 255));
graphics.DrawCurve(&pen, points, 5, 0.0f); // tension 0.0
graphics.DrawCurve(&pen, points, 5, 0.6f); // tension 0.6
graphics.DrawCurve(&pen, points, 5, 1.0f); // tension 1.0
下面的插图显示三条样条及其张力值。请注意,当张力为 0 时,这些点由一条直线连接。
绘制贝塞尔样条
用四个点定义一条贝塞尔样条:一个起点、两个控制点和一个终点。下面的示例绘制了一条起点为 (10, 100)、终点为 (200, 100) 的贝塞尔样条。两个控制点分别为 (100, 10) 和 (150, 150)。
Point p1(10, 100); // start point
Point c1(100, 10); // first control point
Point c2(150, 150); // second control point
Point p2(200, 100); // end point
Pen pen(Color(255, 0, 0, 255));
graphics.DrawBezier(&pen, p1, c1, c2, p2);
下面的插图显示产生的贝塞尔样条及其起点、控制点和终点。该插图还显示样条的凸包络,凸包络是通过将这四个点用直线相连而形成的多边形。
可使用 Graphics 类的 DrawBeziers 方法绘制相连的贝塞尔样条序列。 下面的示例绘制一条由两条相连的贝塞尔样条组成的曲线。第一条贝塞尔样条的终点是第二条贝塞尔样条的起点。
Point p[] = {
Point(10, 100), // start point of first spline
Point(75, 10), // first control point of first spline
Point(80, 50), // second control point of first spline
Point(100, 150), // end point of first spline and
// start point of second spline
Point(125, 80), // first control point of second spline
Point(175, 200), // second control point of second spline
Point(200, 80)}; // end point of second spline
Pen pen(Color(255, 0, 0, 255));
graphics.DrawBeziers(&pen, p, 7);
下面的插图显示相连的样条和这七个点。