我给出了208个点的坐标,但是有时画不出Bezier曲线,为什么?(100分)

  • 主题发起人 主题发起人 donkey
  • 开始时间 开始时间
D

donkey

Unregistered / Unconfirmed
GUEST, unregistred user!
我给出了208个点的坐标,但是有时能够画出曲线,有时画不出Bezier曲线。如果我改用
直接画点的方法,可以看到曲线是正确的形状。为什么?Bezier曲线有画不出的情况吗?
 
我给的点没有重合,我画Bezier曲线主要是为了平滑处理,因为求平均值的方法不理想。
我的点的横坐标是递增的,所以不可能重合。斑竹先生,你说的拟和是什么意思?我的208
个点也是属于3n+1的呀,为什么画不出呢?
 
我的原代码如下:
procedure drawPic(Data:array of integer);
var
Points:array of TPoint;
img:TImage;
i,j:integer;
....
begin
i:=High(Data);
Setlength(Points,I+1);
for j:=0 to i do
begin
Points[j].x:=j;
Points[j].y:=Data[j];
end;
PolyBesiz(Points);
Points:=nil;
....
end;
错在哪里呢?
 
怎么会有这么多的点拿来画Bezier曲线?

关键部分用Bezier ,其他部分就用另外的算法好了
 
单片机的一次采样就是104个点,显示出来太窄,做了插值处理,好象没有办法区分关键
点的。平滑算法到底有几种呀?
 
>>Setlength(Points,I+1);
这句没有问题吗? 我好像觉得有点不妥,不过手头没有delpi 不好试
 
应该是没有问题的,我直接画点的方法就是这样用的,画了几百个图都没问题。
 
版主就是版主,有两下子呀。
我的代码里跟踪进取i是为208,但是Setlength(Points,I+1)就是209了[:(]
只有符合3n+1个才能被画出来[:D][:)][:)][:)]
 
首先要明确 :Bezier曲线的点数约定是 3*N+1;
如果您的给定点有重合的,也许会出现你说的情况;

为什么画那么多的点呢?你的拟和又是怎么处理的?岂不是麻烦的很?

说说你的具体画线方法,或者贴出你的程序,否则谁能够说的清楚呢?

你的 Data :array of integer);是怎么设定的? 确定是 SetLength(Data,208);么?
 
后退
顶部