⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitmain.pas

📁 常用数学计算工具
💻 PAS
📖 第 1 页 / 共 5 页
字号:
 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 + -