一个绘图方面的问题(100分)

  • 主题发起人 主题发起人 赤狼风云
  • 开始时间 开始时间

赤狼风云

Unregistered / Unconfirmed
GUEST, unregistred user!
举一个例子说明这个问题吧:
我用image1.canvas.moveto(x1,y1);
image1.canvas.lineto(x2,y2);
在image上绘制了一条直线,现在,我想将这条直线上的每一点都保存到一个表中,
应该如何做?
 
你保存起点和端点就可以了,为什么要保存所有点?
 
把X1 Y1 X2 Y2 存到数据库,需要时再读出来,或者可以用TMETAFILE矢量图,把WMF文件
保存到数据库中。
最好还是去找一个矢量图编辑软件吧。
 
我的想法是这样的,保存时是只保存起点和终点位置的坐标,但在画图时另起一个线程,在
内存中建立一个内存表,保存这条直线上的每一个点的坐标,这样在进行图形选定时,就不需要
进行大量的运算了,将当前位置的坐标在内存表中进行查找,如果有,则表明选中了这条直
线。
 
用链表吧
 
不要小看一条直线,在屏幕上画的直线有专用的算法,与用y=ax+b算出来的直线,所
有的点集是不一样的,后者画出来的直线有明显的锯齿。所有的线条,包括直线、曲
线都是这样。因此你的想法是不可行的。详细算法,你可以找一本计算机绘图的专著
看看!
 
lineDDA
数据量会不会太大?
如果不闲数据大,为什么不另作一个位图,有点为1,我点为零,查找也方便
 
你既然用的是矢量的画图方式,那么操作也应该是矢量的方式,不然就没有意义了。

点线多边形图形选定等操作都是要自己构建算法的。我以前都发过代码的,到GIS版去看看吧
 
有没有免费的矢量绘图控件
 
var
colornum:TColor;
i:Integer;
begin
colornum:=100;
for i:=0 to 100 do
begin
canvas.pen.width:=2;
canvas.pen.color:=colornum;
canvas.moveto(X1,Y1);
canvas.lineto(X2,y2);
colornum:=colornum+100;
保存其中的x1,y1坐标处的颜色值到一个内存表中
end;
end;
其中,canvas是一个后台画布,可用tbitmap来创建,
大小与前台画布一致,查找时只要将在后台画布中取鼠标当前位置坐标的颜色值,
在内存表中查找,如果存在,表明选中了一个图形。
 
保存直线上所有点的坐标?
不现实!
还是仅仅保存起始、终止点,点选时判断斜率在某个范围内就是了。
 
我的做法是使用区域,然后使用API -- PtInRegion 来判断是否选中
 
请楼上的OpuBF大哥详细说明一下你的做法。我也要做一个这样的东西。
 
http://www.codeidea.com
有TPolyline控件
满足你的要求
 
多人接受答案了。
 
后退
顶部