如何用c++ builder 画图!在线等!

homer98280033 2004-08-12 11:37:20
现在我需要用c++ builder 画曲线,怎样才行呢,例如:
有三点(10,10),(20,15),(30,25)
怎样才能在这三个点中连一个曲线呢?各位:帮帮忙,谢了。
...全文
1024 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
constantine 2004-08-23
  • 打赏
  • 举报
回复
两点画一弧线有办法吗?
可以,不是唯一而已

请问,如何将原来的曲线擦掉呢?
用异或再画一次原来的曲线就可以了
zmrpro 2004-08-23
  • 打赏
  • 举报
回复
调用API可以搞定!!!
Maconel 2004-08-13
  • 打赏
  • 举报
回复
两点画一弧线有办法吗?
------------------------
从数学上就可以断定,不能,2点的信息无法确定一条弧线。

请问,如何将原来的曲线擦掉呢?
------------------------
2种方法,
一种是将Canvas 全部清除。
Canvas->FillRect(Canvas->ClipRect);

另一种是还在原来的线上重复画一次,颜色用背景色。
homer98280033 2004-08-13
  • 打赏
  • 举报
回复
请问,如何将原来的曲线擦掉呢?
lhg3122 2004-08-12
  • 打赏
  • 举报
回复
你最好自己编写一个点的捕捉函数
如:可在OnMouseMove事件函数做这样的处理
if(鼠标坐标与当前的一点相距一定距离&&鼠标左键按下)
{
当前的x坐标=原来的点的x坐标+鼠标移动的x方向距离;
当前的y坐标=原来的点的y坐标+鼠标移动的y方向距离;
擦出原来曲线;
从新以变化的三点来绘制相关曲线;
}
试一下
homer98280033 2004-08-12
  • 打赏
  • 举报
回复
c++ builder 里面好象能支持的东西很少呀!
3996906 2004-08-12
  • 打赏
  • 举报
回复
你得找个能支持你拖动的东西,angel说的那样做就可以了
homer98280033 2004-08-12
  • 打赏
  • 举报
回复
我的意思是能够拖动那几个点,它的图形也跟着变
constantine 2004-08-12
  • 打赏
  • 举报
回复
你要怎么改动都可以啊!记得把原来的擦除再画就可以了
homer98280033 2004-08-12
  • 打赏
  • 举报
回复
不过我是要求那几个点能动,也就是可以改变它的位置,然后再画出曲线,比如说
我改变(20,15) 为(21,17),它的这条线就能动,曲线要求是平滑而且是上升的时候是凹的,下降的时候是秃的
3996906 2004-08-12
  • 打赏
  • 举报
回复
先感谢春辉
从他的C++ Builder初学问与答8中找出,不知道能不能满足你的要求

63)问:TShape控件有什么重要属性?
答:这个组件可以显示一些常见的几何图形,例如矩形、圆、椭圆等。几何图形组件有几个比较重要的属性:Brush,Pen 和Shape。
Brush属性,用来设置几何图形内部的填充特性,包括填充的图案(Style)和颜色(Color)等。
Pen属性,用来设置几何图形的外框特性,包括画笔的颜色(Color)、线型(Style)和线宽(Width)及Mode关系等。
属性Shape,用来指出所显示的几何图形类型。这个属性可以有六种不同的值,分别表示六种不同的几何图形;
(1)stEllipse表示椭圆。
(2)stRectangle表示矩形。
(3)stRoundRect表示圆角矩形。
(4)stRoundSquare表示圆角正方形。
(5)stSquare表示正方形。
(6)stCircle表示圆。
在设计阶段,你可以使用鼠标改变图形的尺寸。在运行期间,可以通过Height和Width属性改变图形的尺寸。
64)问:属性Brush前面有一个加号,它是什么意思?
答:它表示这个属性是可以展开的,也就是说,它还包含一些子属性。单击加号,可以发现它的子属性是:Color和Style。
Color属性包含一系列C++Builder预定义的颜色,你可以从中为显示的几何图形选择一种填充颜色。
Style属性确定了几何图形的填充样式,它可以分别取这样8种值:bsBDiagonal, bsClear, bsCross, bsDiagCross, bsDiagonal, bsHorizontal, bsSolid和bsVertical。
属性Pen也象属性Brush一样有子属性。它的子属性是Color, Mode, Style和Width。其中最常用的就是Style和Width,它们分别表示线型和线宽。子属性Style可以取这样一些值来画边框:
psSolid 表示实线。
psDash 表示破折号。
psDot 表示圆点。
psDashDot 表示破折号和圆点。
psDashDotDot 表示破折号、圆点、圆点。
psClear 表示没有线。
psInsideFrame 表示内框实线。
65)问:这个画板组件有什么作用?
答:画板组件主要为用户提供一块作图区域,用户可以使用绘图语句在这个作图区域上画出各种不同的图形。
要注意的是,由于画板组件没有边界,所以通常应该把它放在一个有边界的容器类组件上。
画板组件主要使用Canvas属性来进行绘图工作。Canvas(画布)是类TCanvas的对象,类TCanvas包含绘图中使用的各种方法和属性。下面我们首先介绍Canvas对象的各种属性。
画笔(Pen) Canvas对象中有一个画笔成员,它确定绘制几何图形时使用的画笔类型。刚才我们介绍了画笔的线型和线宽。
画笔的Color属性是绘图时使用的前景色。
画笔的属性Mode用来确定画笔与屏幕上原有点的混合方式。可结合当前的颜色、屏幕的颜色或它们的反转值,对线段的颜色重新定义。但不改变Color属性。
它可以取这样一些值:
pmBlack:表示用黑色绘图;
pmWhite:表示用白色绘图;
pmNot:画笔绘制的点的颜色与原有的颜色相反;
pmCopy:画笔用Color属性中定义的颜色绘图。
PmNotCopy:画笔用Color属性中定义的颜色的反转色绘图;
PmMergePenNot:画笔用Color属性中定义的颜色与屏幕颜色的反转色结合后绘图;
PmMaskNotPen:画笔用屏幕颜色与Color属性中定义的颜色结合后绘图;
PmMergeNotPen:画笔用屏幕颜色与Color属性中定义的颜色的反转值结合后绘图。
Brush属性,刷子属性在前面已经详细介绍过,它可以确定图形的填充模式和填充颜色。
属性ClipRect,用来确定绘图区域的范围。任何超出这个范围的图形不会显示。
66)问:在Canvas对象上,我们可以用怎样的方法来完成作图工作?
答:Canvas对象有一些基本做图方法:
1.首先是MoveTo方法,MoveTo将笔的当前位置设置到点(x,y)处,笔的当前位置将保存到PenPos属性中,要注意的是,改变笔的当前位置用MoveTo方法,而不要修改PenPos属性。函数形式为MoveTo(x,y)。
2.LineTo方法,用来完成从当前位置画一条直线至点(x,y),并把笔的位置移动到这一点。函数形式为LineTo(x,y)。
在画线时一般首先使用方法MoveTo移动线的起始点,然后再使用方法LineTo画直线。
3.方法Rectangle用来在画布上用当前画刷绘制矩形,其中x1,y1是矩形的左上角坐标,x2,y2是矩形的右下角坐标。因为正方形实际上就是一种特殊的矩形,所以你可以使用这个方法画出正方形。函数形式为Rectangle(x1,y1,x2,y2)。
4.方法Ellipset用来在画布上给定的矩形边界上画一个椭圆,其中x1,y1是边界矩形的左上角坐标,x2,y2是边界矩形的右下角坐标。所谓边界矩形就是圆或椭圆的外接矩形。函数形式为Ellipse(x1,y1,x2,y2)。
5.方法RoundRect用来绘制圆角矩形:其中x1,y1,x2,y2分别是圆角矩形虚拟的左上角和右下角。x3,y3是圆角的长短半径。函数形式为RoundRect(x1,y1,x2,y2)。
6.方法Polygon可以画出多边形。函数形式为Polygon(Tpoint p,int Point_Size)。
参数P是类Tpoint的一个数组,每一个Tpoint对象包含一个点的X和Y坐标。Points_Size用来指示数组的大小。这个是实心多边形,Polyline是画多边形的,二者用法基本相同。
67)问:在显示区域输出文本信息,我们是不是还象DOS下用printf函数来实现?
答:printf是一个控制台函数,不能在窗口程序中使用,一般我们TextOut输出文本,其声明:void _fastcall TextOut(int X,int Y,const AnsiString Text);其中x,y是输出字符串起始点的坐标,text是要输出的文本。当然你要用Lable也是可以的
cczlp 2004-08-12
  • 打赏
  • 举报
回复
如果没有要求什么曲线,可以用Bezier曲线:

#define N 4
TPoint pt[N] = {TPoint(10, 10), TPoint(20, 15), TPoint(30, 25),
TPoint(40, 60)};
Image1->Canvas->PolyBezier(pt, N - 1);

jiangchun_xn 2004-08-12
  • 打赏
  • 举报
回复
什么曲线阿????过三点的曲线是无限的阿
homer98280033 2004-08-12
  • 打赏
  • 举报
回复
两点画一弧线有办法吗?
homer98280033 2004-08-12
  • 打赏
  • 举报
回复
请问一下:
如何控制他的秃和凹呢?
freshman2003 2004-08-12
  • 打赏
  • 举报
回复
赞成扒手的,用Bezier曲线,我用过,简单好用。拖动节点时,擦除赋参数重画就可以了。
yjy1001 2004-08-12
  • 打赏
  • 举报
回复
函数功能:该函数画一段圆弧,圆弧是由一个椭圆和一条线段(称之为割线)相交限定的闭合区域。此弧由当前的画笔画轮廓,由当前的画刷填充。

函数原型:BOOL Chord(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2);

参数:

hdc:设备环境的句柄,圆弧出现在其中。

nLeftRect:指定边界矩形左上角的X坐标。

nTopRect:指定边界矩形左上角的Y坐标。

nRightRect:指定边界矩形右上角的X坐标。

nBottomRect:指定边界矩形右上角的Y坐标。

nXRadial1:指定定义圆弧的起始R的射线端点的X坐标。

nYRadial1:指定定义圆弧的起始半径端点的Y坐标。

nXRadial2:指定定义圆弧的终止处的半径端点的X坐标。

nYRadial2:指定定义圆弧的终止处的半径端点的Y坐标。

返回值:如果函数调用成功,返回值非零;如果函数调用失败,返回值为0。

备注:圆弧的曲线是符合边界矩形的椭圆定义的。曲线开始于椭圆与第一条半径的交点,以逆时针方向延伸到椭圆与第二条半径的交点处。(一条半径是指从椭圆的中心到椭圆上指定端点之间的线段),圆弧被从第一条半径的端点到第二条半径的端点的一条线段和曲线封闭起来。若起始点和终止点生命,则画整个椭圆。

当前位置既不会被圆弧使用也不会被圆弧修改。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧