一个错误,请指点迷津!!!

zhiduoxing8402 2005-11-11 05:29:14
出问题的地方在最下面(上面是画椭圆的算法)
procedure TForm2.Button1Click(Sender: TObject);
var
a,b,x,y:integer;
d1,d2:real;
begin
form1.Image1.Picture.Bitmap:=Tbitmap.Create;
form1.Image1.Picture.Bitmap.Width:=form1.Image1.Width;
form1.Image1.Picture.Bitmap.Height:=form1.Image1.Height;
a:=strtoint(edit1.Text);
b:=strtoint(edit2.Text);
x:=strtoint(edit3.Text);
y:=strtoint(edit4.Text);
x:=0;
y:=b;
d1:=b*b+a*a*(-b+0.25);
form1.Image1.Canvas.Pixels[x,y]:=clred;
form1.Image1.Canvas.Pixels[-x,-y]:=clred;
form1.Image1.Canvas.Pixels[-x,y]:=clred;
form1.Image1.Canvas.Pixels[x,-y]:=clred;
while b*b*(x+1)<a*a*(y-0.5) do
begin
if d1<=0 then
begin
d1:=d1+b*b*(2*x+3);
x:=x+1;
end
else
begin
d1:=d1+(b*b*(2*x+3)+a*a*(-2*y+2));
x:=x+1;
y:=y-1;
end;
end;
form1.Image1.Canvas.Pixels[x,y]:=clred;
form1.Image1.Canvas.Pixels[-x,-y]:=clred;
form1.Image1.Canvas.Pixels[-x,y]:=clred;
form1.Image1.Canvas.Pixels[x,-y]:=clred;
d2:=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;
while y>0 do
begin
if d2<=0 then
begin
d2:=d2+b*b*(2*x+2)+a*a*(-2*y+3);
x:=x+1;
y:=y-1;
end
else
begin
d2:=d2+a*a*(-2*y+3);
y:=y-1;
end;
end;
form1.Image1.Canvas.Pixels[x,y]:=clred;
form1.Image1.Canvas.Pixels[-x,-y]:=clred;
form1.Image1.Canvas.Pixels[-x,y]:=clred;
form1.Image1.Canvas.Pixels[x,-y]:=clred;
end;
end.
运行程序,显示如下错误:
[Hint] Unit2.pas(46): Value assigned to 'x' never used
[Hint] Unit2.pas(47): Value assigned to 'y' never used
是不是什么地方出现了死循环请多多指教。
急用
...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chijingde 2005-11-21
  • 打赏
  • 举报
回复
给自己的代码排排版,就一目了然了

Procedure TForm1.Button1Click(Sender: TObject);
Var
a, b, x, y: integer;
d1, d2: real;
Begin
form1.Image1.Picture.Bitmap := Tbitmap.Create;
form1.Image1.Picture.Bitmap.Width := form1.Image1.Width;
form1.Image1.Picture.Bitmap.Height := form1.Image1.Height;
a := strtoint(edit1.Text);
b := strtoint(edit2.Text);
x := strtoint(edit3.Text);
y := strtoint(edit4.Text);
x := 0;
y := b;
d1 := b * b + a * a * (-b + 0.25);
form1.Image1.Canvas.Pixels[x, y] := clred;
form1.Image1.Canvas.Pixels[-x, -y] := clred;
form1.Image1.Canvas.Pixels[-x, y] := clred;
form1.Image1.Canvas.Pixels[x, -y] := clred;
While b * b * (x + 1) < a * a * (y - 0.5) Do
Begin
If d1 <= 0 Then
Begin
d1 := d1 + b * b * (2 * x + 3);
x := x + 1;
End
Else
Begin
d1 := d1 + (b * b * (2 * x + 3) + a * a * (-2 * y + 2));
x := x + 1;
y := y - 1;
End;
End;
form1.Image1.Canvas.Pixels[x, y] := clred;
form1.Image1.Canvas.Pixels[-x, -y] := clred;
form1.Image1.Canvas.Pixels[-x, y] := clred;
form1.Image1.Canvas.Pixels[x, -y] := clred;
d2 := b * b * (x + 0.5) * (x + 0.5) + a * a * (y - 1) * (y - 1) - a * a * b * b;
While y > 0 Do
Begin
If d2 <= 0 Then
Begin
d2 := d2 + b * b * (2 * x + 2) + a * a * (-2 * y + 3);
x := x + 1;
y := y - 1;
End
Else
Begin
d2 := d2 + a * a * (-2 * y + 3);
y := y - 1;
End;
End;
form1.Image1.Canvas.Pixels[x, y] := clred;
form1.Image1.Canvas.Pixels[-x, -y] := clred;
form1.Image1.Canvas.Pixels[-x, y] := clred;
form1.Image1.Canvas.Pixels[x, -y] := clred;
End;



说几个比较明显的错误

1.在类里面使用实例,不符合面向对象的思想

2.所有的绘图代码都不在循环中,也就是说你的循环只改变x,y的值,根本没有进行绘图
Jasonli8205 2005-11-18
  • 打赏
  • 举报
回复
楼上正解!
FigoZhu 2005-11-15
  • 打赏
  • 举报
回复
别的还没看,
这里就有问题,x的值被覆盖了:

x:=strtoint(edit3.Text); // 先=edit3的内容
y:=strtoint(edit4.Text);
x:=0; // 又=0了
zhiduoxing8402 2005-11-11
  • 打赏
  • 举报
回复
可我是按书上c语言算法一步步转换过来的呀,我也知道两个变量没派上用场,可改来改去还是不行呀,lovendll能不能帮我看看什么地方出错了呀
lovendII 2005-11-11
  • 打赏
  • 举报
回复
[Hint] Unit2.pas(46): Value assigned to 'x' never used
[Hint] Unit2.pas(47): Value assigned to 'y' never used

提示有两个变量没有使用到。
应该是你的写法有点问题,没认出x,y来,没有用上
zhiduoxing8402 2005-11-11
  • 打赏
  • 举报
回复
运行是可以运行,可是x,y两个值没有起到任何作用呀,结果只画出一直线,画不出椭圆呀
g961681 2005-11-11
  • 打赏
  • 举报
回复
Hint是编译提示吧!
就算有hint也不算错误的啊~~~~~,可以运行啊~

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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