📄 unitmain.pas
字号:
end;
except
end;
EditJD.Tag:=0;
end;
procedure TFormMath.EditStaChange(Sender: TObject);
var
Value:Extended;
begin
try
if CStrToFloat('ScaC('+IntToStr(ComboBoxSta.ItemIndex)+','
+EditSta.Text+')',Value,SStrs) then begin
EditStaAnswer.Text:=FloatToStr(Value);
EditSta.Font.Color:=clBlack;
end else begin
EditStaAnswer.Clear;
EditSta.Font.Color:=clRed;
end;
except
end;
end;
procedure TFormMath.CheckBoxXYEClick(Sender: TObject);
begin
// SDFunOL.Visible:=CheckBoxOutLine.Checked;
// SDFun.Visible:=not SDFunOL.Visible;
end;
procedure TFormMath.EditXVRChange(Sender: TObject);
var
Ratio:Extended;
begin
if EditXVR.Tag=1 then exit;
EditYVR.Tag:=1;
if JudgeFloat(EditXVR) then
begin
TexttoFloat(EditXVR.Text,Ratio);
if Ratio<=0.5 then begin
Ratio:=1;
EditXVR.Text:='1.0';
exit;
end;
SDFun.ViewXRatio:=Ratio;
if CheckBoxXYE.Checked then begin
EditYVR.Text:=EditXVR.Text;
SDFun.ViewYRatio:=SDFun.ViewXRatio;
end;
SDFun.Refresh;
end;
EditYVR.Tag:=0;
end;
procedure TFormMath.EditYVRChange(Sender: TObject);
var
Ratio:Extended;
begin
if EditYVR.Tag=1 then exit;
EditXVR.Tag:=1;
if JudgeFloat(EditYVR) then
begin
TexttoFloat(EditYVR.Text,Ratio);
if Ratio<=0.5 then begin
Ratio:=1;
EditYVR.Text:='1.0';
exit;
end;
SDFun.ViewYRatio:=Ratio;
if CheckBoxXYE.Checked then begin
EditXVR.Text:=EditYVR.Text;
SDFun.ViewXRatio:=SDFun.ViewYRatio;
end;
SDFun.Refresh;
end;
EditXVR.Tag:=0;
end;
procedure TFormMath.CheckBoxSCClick(Sender: TObject);
begin
SDFun.SelfCoordinate:=CheckBoxSC.Checked;
end;
procedure TFormMath.CheckBoxEupClick(Sender: TObject);
begin
if CheckBoxEup.Checked
then SDFun.SelfCoorStyle:=SDFun.SelfCoorStyle+[scsUp]
else SDFun.SelfCoorStyle:=SDFun.SelfCoorStyle-[scsUp];
end;
procedure TFormMath.CheckBoxEDownClick(Sender: TObject);
begin
if CheckBoxEDown.Checked
then SDFun.SelfCoorStyle:=SDFun.SelfCoorStyle+[scsDown]
else SDFun.SelfCoorStyle:=SDFun.SelfCoorStyle-[scsDown];
end;
procedure TFormMath.EditMaxXChange(Sender: TObject);
var
Value:Extended;
begin
if not JudgeFloat(Sender) then exit;
TextToFloat(TLabeledEdit(Sender).Text,Value);
Case TComponent(Sender).Tag of
0: SDFun.SelfMaxX:=Value;
1: SDFun.SelfMinX:=Value;
2: SDFun.SelfMaxY:=Value;
3: SDFun.SelfMinY:=Value;
4: SDFun.SelfMaxZ:=Value;
5: SDFun.SelfMinZ:=Value;
end;
if CheckBoxSC.Checked then SDFun.Refresh;
end;
procedure TFormMath.BitBtn2DAClick(Sender: TObject);
begin
if BitBtn2DA.Caption='2D动画' then begin
BitBtn2DA.Caption:='停止2D动画';
SDFun.AnimateDraw();
end else begin
SDFun.StopAnimate;
end;
BitBtn2DA.Caption:='2D动画';
end;
procedure TFormMath.TimerXYZTimer(Sender: TObject);
var
Cx,Cy,Cz:Extended;
begin
Cx:=(SDfun.CMinX+SDfun.CMaxX)/2; Cy:=(SDfun.CMinY+SDfun.CMaxY)/2; Cz:=(SDfun.CMinZ+SDfun.CMaxZ)/2;
if SDfun.Can3D then begin
if (SidaX=0)and(sidaY=0)and(sidaZ=0) then SidaX:=1;
if Sidax<>0 then begin
Inc(SidaX); SDfun.Roll3D(Cx,Cy,Cz,1,0,0);
end;
if SidaY<>0 then Begin
Inc(SidaY); SDfun.Roll3D(Cx,Cy,Cz,0,1,0);
end;
if SidaZ<>0 then begin
Inc(SidaZ); SDfun.Roll3D(Cx,Cy,Cz,0,0,1);
end;
if SidaX>=360 then begin
SidaX:=0; SidaY:=1; SidaZ:=0;
end;
if SidaY>=360 then begin
SidaX:=0; SidaY:=0; SidaZ:=1;
end;
if SidaZ>=360 then begin
SidaX:=1; SidaY:=0; SidaZ:=0;
end;
end else begin
Inc(SidaZ); SDfun.Roll2D(Cx,Cy,1); if SidaZ>=360 then SidaZ:=0;
end;
SDfun.Refresh;
end;
procedure TFormMath.BitBtn3DRClick(Sender: TObject);
begin
if BitBtn3DR.Caption='3D旋转动画' then begin
BitBtn3DR.Caption:='停止3D旋转';
if SidaX<>0 then begin sidaY:=1; SidaX:=0; end else
if SidaY<>0 then begin sidaZ:=1; SidaY:=0; end else
if SidaZ<>0 then Begin SidaX:=1; SidaZ:=0; end;
TimerXYZ.Enabled:=True;
end else begin
BitBtn3DR.Caption:='3D旋转动画';
TimerXYZ.Enabled:=False;
end;
end;
procedure TFormMath.BitBtn3DTurnClick(Sender: TObject);
var
x,y,z,sida:Extended;
begin
if not JudgeFloat(Edit2DRX,Sender<>nil) then exit;
TextToFloat(Edit2DRX.Text,X);
if not JudgeFloat(Edit2DRY,Sender<>nil) then exit;
TextToFloat(Edit2DRY.Text,Y);
if not JudgeFloat(Edit23DRZ,Sender<>nil) then exit;
TextToFloat(Edit23DRZ.Text,Z);
if not JudgeFloat(Edit2DRNum,Sender<>nil) then exit;
TextToFloat(Edit2DRNum.Text,sida);
Case ComboBox3DTS.ItemIndex of
0: SDFun.Roll3D(X,Y,Z,sida,0,0);
1: SDFun.Roll3D(X,Y,Z,0,sida,0);
2: SDFun.Roll3D(X,Y,Z,0,0,sida);
end;
SDFun.Refresh;
end;
procedure TFormMath.BitBtn2DRClick(Sender: TObject);
var
x,y,sida:Extended;
begin
if not JudgeFloat(Edit2DRX,Sender<>nil) then exit;
TextToFloat(Edit2DRX.Text,X);
if not JudgeFloat(Edit2DRY,Sender<>nil) then exit;
TextToFloat(Edit2DRY.Text,Y);
if not JudgeFloat(Edit2DRNum,Sender<>nil) then exit;
TextToFloat(Edit2DRNum.Text,sida);
SDFun.Roll2D(X,Y,Sida);
SDFun.Refresh;
end;
procedure TFormMath.Edit2DRNumChange(Sender: TObject);
begin
JudgeFloat(Sender);
end;
procedure TFormMath.BitBtn2DRCClick(Sender: TObject);
begin
if BitBtn2DRC.Caption='连续2D旋转' then begin
BitBtn2DRC.Caption:='停止连续旋转';
Repeat BitBtn2DRClick(nil);
Application.ProcessMessages;
until BitBtn2DRC.Tag=1;
BitBtn2DRC.Tag:=0;
end else begin
BitBtn2DRC.Tag:=1;
end;
BitBtn2DRC.Caption:='连续2D旋转';
end;
procedure TFormMath.RadioGroupCOClick(Sender: TObject);
begin
EditXC.Enabled:=False;
EditXC.Editlabel.Caption:='X=';
EditYC.Enabled:=False;
EditYC.Editlabel.Caption:='Y=';
EditKC.Enabled:=False;
EditLC.Enabled:=False;
CheckBoxEC.Enabled:=True;
Case RadioGroupCO.ItemIndex of
1: EditXC.Enabled:=True;
0: EditYC.Enabled:=True;
2: begin EditXC.Enabled:=True;
EditYC.Enabled:=True;
EditKC.Enabled:=True;
EditLC.Enabled:=True;
CheckBoxEC.Enabled:=False;
end;
3: begin
CheckBoxEC.Enabled:=False;
EditXC.Enabled:=True;
EditXC.Editlabel.Caption:='X分';
EditYC.Enabled:=True;
EditYC.Editlabel.Caption:='Y分';
end;
end;
end;
procedure TFormMath.BitBtnCreateLineClick(Sender: TObject);
var
X,Y,K,L:Extended;
begin
Case RadioGroupCO.ItemIndex of
0: begin
if not JudgeFloat(EditYC,True) then exit;
TextToFloat(EditYC.Text,Y);
SDFun.AddXParallel(Y,CheckBoxEC.Checked,RadioGroupCS.ItemIndex);
end;
1: begin
if not JudgeFloat(EditXC,True) then exit;
TextToFloat(EditXC.Text,X);
SDFun.AddYParallel(X,CheckBoxEC.Checked,RadioGroupCS.ItemIndex);
end;
2: begin
if not JudgeFloat(EditYC,True) then exit;
TextToFloat(EditYC.Text,Y);
if not JudgeFloat(EditXC,True) then exit;
TextToFloat(EditXC.Text,X);
if not JudgeFloat(EditKC,True) then exit;
TextToFloat(EditKC.Text,K);
if not JudgeFloat(EditLC,True) then exit;
TextToFloat(EditLC.Text,L);
SDFun.AddSCLineK(X,Y,K,L,RadioGroupCS.ItemIndex,'',False,SDFun.Font.Color);
end;
3: begin
if JudgeFloat(EditYC)and JudgeFloat(EditXC)
then begin
TextToFloat(EditYC.Text,Y);
TextToFloat(EditXC.Text,X);
end else begin
X:=5; Y:=5;
end;
SDFun.AddGrids(SDFun.CMinX,SDFun.CMaxX,SDFun.CMinY,SDFun.CMaxY,
Round(x),Round(Y),2);
end;
end;
SDFun.Refresh;
end;
procedure TFormMath.BitBtnC1Click(Sender: TObject);
begin
Case TComponent(Sender).Tag of
0: SDFun.ClearXParallel;
1: SDFun.ClearYParallel;
2: SDFun.ClearSCLine;
end;
SDFun.Refresh;
end;
procedure TFormMath.MemoEqLeftChange(Sender: TObject);
var
S:String;
FunCom:TFunCommand;
begin
S:=CStrToSStr(MemoEqleft.Text,SStrs);
if StrToFunCom(S,FunCom,EditEqVC.Text[1]) then begin
MemoEqLeft.Font.Color:=clBlack;
end else begin
MemoEqLeft.Font.Color:=clRed;
end;
FreeFunCommand(FunCom);
end;
procedure TFormMath.EditEqRightChange(Sender: TObject);
begin
JudgeCStr(Sender,EditEqVC.Text[1]);
end;
procedure TFormMath.EditEqAChange(Sender: TObject);
begin
JudgeFloat(Sender);
end;
procedure TFormMath.EditEqVCChange(Sender: TObject);
var
S:String;
begin
S:=TLabeledEdit(Sender).Text;
if s='' then exit;
if Length(s)>1 then begin
Delete(S,2,Length(s)-1);
TLabeledEdit(Sender).Text:=S;
exit;
end;
if S[1]>'Z' then S[1]:='Z';
if S[1]<'A' then S[1]:='A';
EditEqXB.EditLabel.Caption:=S+'从:';
MemoEqLeftChange(nil);
EditEqRightChange(EditEqRight);
end;
procedure TFormMath.BitBtnGetAnswerClick(Sender: TObject);
const MaxCount=10000000; //一千万次
var
S:String;
FunCom,FunComR:TFunCommand;
V,VR,VL,VM,temp,
Pre:Extended;
Count:Integer;
begin
if not JudgeFloat(EditEqA,True) then exit;
TextToFloat(EditEqA.Text,Pre);
if not JudgeFloat(EditEqXB,True) then exit;
TextToFloat(EditEqXB.Text,VL);
if not JudgeFloat(EditEqXE,True) then exit;
TextToFloat(EditEqXE.Text,VR);
if VL>VR then begin
Temp:=VL; VL:=VR; VR:=Temp;
end;
S:=CStrToSStr(MemoEqleft.Text,SStrs); //左等式
if StrToFunCom(S,FunCom,EditEqVC.Text[1]) then begin
MemoEqLeft.Font.Color:=clBlack;
end else begin
MemoEqLeft.Font.Color:=clRed;
MessageBox(handle,'方程左边出错!','错误',mb_OK);
FreeFunCommand(FunCom);
Exit;
end;
S:=CStrToSStr(EditEqRight.Text,SStrs); //右等式
if StrToFunCom(S,FunComR,EditEqVC.Text[1]) then begin
MemoEqLeft.Font.Color:=clBlack;
end else begin
MemoEqLeft.Font.Color:=clRed;
MessageBox(handle,'方程右边出错!','错误',mb_OK);
FreeFunCommand(FunCom);
FreeFunCommand(FunComR);
Exit;
end;
try
if (GetFunValue(FunCom,VR)-GetFunValue(FunComR,VR))
*(GetFunValue(FunCom,VL)-GetFunValue(FunComR,VL))>0 then begin
FreeFunCommand(FunCom); FreeFunCommand(FunComR);
MessageBox(handle,'方程用所给区间无法求解!'#$D'请观察它的图形后再选择区间!','错误',mb_OK);
exit;
end;
Count:=0;
Repeat
Inc(Count);
Temp:=GetFunValue(FunCom,VL)-GetFunValue(FunComR,VL);
VM:=(VL+VR)/2;
V:=GetFunValue(FunCom,VM)-GetFunValue(FunComR,VM);
if V*Temp>0 then VL:=VM else VR:=VM;
until (Abs(V)<Abs(Pre) )or (Count>MaxCount);
if Abs(V)>Abs(Pre) then MessageBox(handle,'未达到精度!','警告',mb_OK);
EditEqAnswer.Text:= FloatToStr(VM);
except
FreeFunCommand(FunCom); FreeFunCommand(FunComR);
MessageBox(Handle,'运算错误!','错误',mb_OK);
end;
FreeFunCommand(FunCom); FreeFunCommand(FunComR);
end;
procedure TFormMath.MemoIntFunChange(Sender: TObject);
begin
JudgeCStr(MemoIntFun,'X');
end;
procedure TFormMath.EditIntXBChange(Sender: TObject);
begin
JudgeFloat(Sender);
end;
procedure TFormMath.BitBtnIntGetClick(Sender: TObject);
var
FunCom:TFunCommand;
XB,XE,Cent:Extended;
begin
if not(JudgeCStr(MemoIntFun,'X',True)and JudgeFloat(EditIntXB,True)and
JudgeFloat(EditIntXE,True)and JudgeFloat(EditIntCent,True)) then exit;
StrToFunCom(CStrToSStr(MemoIntFun.Text,SStrs),FunCom,'X');
try
TextToFloat(EditIntXB.Text,XB);
TextToFloat(EditIntXE.Text,XE);
TextToFloat(EditIntCent.Text,Cent);
EditIntAnswer.Text:=FloatToStr
(Integral(FunCom,XB,XE,Round(Cent)) );
except
MessageBox(handle,'运算错误!','错误',mb_OK);
end;
FreeFunCommand(FunCom);
end;
proc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -