求教一个delphi画线问题!!(100分)

L

lingb

Unregistered / Unconfirmed
GUEST, unregistred user!
已知两个力的大小F1、F2和夹角a,要求在窗口画出最大合力和两个已知的力,用直线画出便可。我根据数学、物理知识求出了合力的大小F、合力F与两个分力的交角a1、a2,从起点()开始画线,往下垂直画合力,然后根据计算出的合力与分力的交角a1和已知的分力F1求出分力F1的坐标,同理求出F2的坐标,然后画F1、F2,可是画出来的图形却发现F1、F2与F不是平行四边形关系,即从画出的直线看最大合力F并不是F1与F2的构成的平行四边形的对角线。不知为何?数学、物理计算公式应该无误!
程序的函数如下:
function TForm1.Line(F1,F2,a:Extended):Extended;//画合力和分力,返回合力
var
i,j,k,F:extended;
m:integer;
begin
i:=0;
j:=0;
m:=0;
//画合力
form1.Canvas.MoveTo(450,100);
i:=cos(a*PI/180);
F:=sqrt(sqr(F1)+sqr(F2)+2*F1*F2*i); //求得合力
m:=round(F);
form1.Canvas.LineTo(450,100+m);
//画第一、二个分力
form1.Canvas.MoveTo(450,100);
if a<=90 then
begin
i:=arcsin(F1*cos((90-a)*PI/180)/F)*180/PI;//非弧度值 ,角度值
j:=a-i;
end
else if F1<F then
begin
i:=arcsin(F1*cos((a-90)*PI/180)/F)*180/PI;//非弧度值 ,角度值
j:=a-i;
end
else begin
i:=arcsin(F2*cos((a-90)*PI/180)/F)*180/PI;//非弧度值 ,角度值
j:=a-i;
end;
Form1.Canvas.Lineto(450-Round(F1*sin(j*PI/180)),100+Round(F1*cos(j*PI/180)));
//画第二个分力
form1.Canvas.MoveTo(450,100);
Form1.Canvas.Lineto(450+Round(F1*sin(i*PI/180)),100+Round(F1*cos(i*PI/180)));
result:=F;
end;
 
无人指教啊?:(
 
是你自己粗心造成的
我已经给你改好了
function TForm1.Line(F1,F2,a:Extended):Extended;//画合力和分力,返回合力
var
i,j,k,F:extended;
m:integer;
begin
i:=0;
j:=0;
m:=0;
//画合力
form1.Canvas.MoveTo(450,100);
i:=cos(a*PI/180);
F:=sqrt(sqr(F1)+sqr(F2)+2*F1*F2*i); //求得合力
m:=round(F);
form1.Canvas.LineTo(450,100+m);
//画第一、二个分力
form1.Canvas.MoveTo(450,100);
if a<=90 then
begin
i:=arcsin(F1*cos((90-a)*PI/180)/F)*180/PI;//非弧度值 ,角度值
j:=a-i;
end
else if F1<F then
begin
i:=arcsin(F1*cos((a-90)*PI/180)/F)*180/PI;//非弧度值 ,角度值
j:=a-i;
end
else begin
i:=arcsin(F2*cos((a-90)*PI/180)/F)*180/PI;//非弧度值 ,角度值
j:=a-i;
end;
Form1.Canvas.Lineto(450-Round(F1*sin(j*PI/180)),100+Round(F1*cos(j*PI/180)));
//画第二个分力
form1.Canvas.MoveTo(450,100);
Form1.Canvas.Lineto(450+Round(F2*sin(i*PI/180)),100+Round(F2*cos(i*PI/180)));
result:=F;
end;
 
谢谢啊:)粗心害死人啊!兄弟真是细心:)接受啦:)
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部