Avatar billede zerohero Nybegynder
19. september 2001 - 19:59 Der er 4 kommentarer og
1 løsning

Sinus & cosinus

Jeg har prøvet følgende:

sin()    cos()
arcsin()  arccos()
sinh()    cosh()
arcsinh() arccosh()

og ingen af dem giver samme resultat som en lommeregner... Hvad skal jeg bruge for at få det rigtige resultat???

ZeroHero
Avatar billede pellelil Nybegynder
19. september 2001 - 20:01 #1
Allerede besvarret under et af dine andre spøgsmål
<SNIP>
Din lommeregner arbejder nok i grader hvorimod Delphi arbejder i Radianer. Når vi taler grader så er en fuld cirkel 360 grader (mon ikke du vidste det <G>). Når du i stedet regner i Radianer så er en fuld cirkel 2 * pi.

For at omregne mellem Grader og Radianer se: RadToDeg og DegToRad.
</SNIP>
Avatar billede pellelil Nybegynder
19. september 2001 - 20:03 #2
Lidt uddybende - Sinus til 45 grader er således: X := Sin(DegToRad(45));
Avatar billede zerohero Nybegynder
19. september 2001 - 20:14 #3
Pellelil kan du ikke fortælle mig samtidig, hvordan jeg kan gøre sådan at, hvis jeg trykker to knapper ned samtidig så fatter delphi det og vil udføre 2 procedure...
Avatar billede pellelil Nybegynder
19. september 2001 - 21:36 #4
Sendte jeg ikke (i sin tid) dig mit Delphi/OpenGL eksempel? I dette opbygger jeg et array over keys. I OnKeyDown sætter jeg et flag (i arrayet) når tasten trykkes ned, og i OnKeyUp sletter jeg igen flaget. I programmet kigger jeg blot på dette array og ved således hvilke taster der på et given tidspunkt er trykked nede.
Avatar billede pellelil Nybegynder
19. september 2001 - 21:40 #5
var
  FKeys                : Array[0..255] of Boolean;

/* Formens Initialisering */
for iIdx := 0 to 255 do begin
  FKeys[iIdx] := False;
end;


procedure TFormEICAS.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  OldKeys : Array[0..255] of Boolean;
  iIdx    : Integer;
  fFactor : Float;
var
  FormChoosePlane: TFormChoosePlane;
begin
  for iIdx := 0 to 255 do begin
    OldKeys[iIdx] := FKeys[iIdx];
  end;
  FKeys[(Key and $FF)] := True;
  Caption := IntToStr(Key);
  if Key = 27 then Close;                              // ESC = EXIT
  if Key = 81 then Close;                              // Q = EXIT
  // Show EICAS-Keys while pressing and holding F1
  if (Key = 112) and not (FShowEICASKeys) then begin
    FShowEICASKeys := True;
    UpdateCaption;
    FormPaint(Nil);
  end;
  {
  if Key = 87 then begin                // W = Visible Window
    VisibleFrame := not VisibleFrame;
  end;
  }
//  if Key = 84 then EICASMode := Test;                  // T = Test
  if Key = 82 then begin                    // R = Toggle \"Show FrameRate\"
    if FKeys[17] then B747.Initialize        // CTRL-R = Reset
                else ShowFrameRate := Not ShowFrameRate;
  end;

  case Key of
    78  : begin    // N = Engines
            if B747.Cockpit.EicasModule.SelectedMode <> emENG then begin
              B747.Cockpit.EicasModule.SelectedMode := emENG;
            end else begin
              B747.Cockpit.EicasModule.SelectedMode := emNone;
            end;
          end;
  end;
//  if Key = 78 then EICASMode := ENG;
  if Key = 83 then B747.Cockpit.EicasModule.SelectedMode := emSTAT;  // S = Stat (controls)
  if Key = 76 then B747.Cockpit.EicasModule.SelectedMode := emELEC;  // L = Electrics
  if Key = 70 then B747.Cockpit.EicasModule.SelectedMode := emFUEL;  // F = Fuel (tank/punmp)
  if Key = 69 then B747.Cockpit.EicasModule.SelectedMode := emECS;  // E = ECS
  if Key = 72 then B747.Cockpit.EicasModule.SelectedMode := emHYD;  // H = Hydraulics
  if Key = 68 then B747.Cockpit.EicasModule.SelectedMode := emDRS;  // D = Doors
  if Key = 71 then B747.Cockpit.EicasModule.SelectedMode := emGEAR;  // G = Gear

//  if Key = 67 then                  // C = Cancel
//  if Key = 82 then                  // R = Recall

  if FKeys[16] then fFactor := 0.10 else fFactor := 0.01;
  if Key = 107 then begin                                  // Gray +
      glOrtho(-1.0+fFactor, 1.0-fFactor, -1.0+fFactor, 1.0-fFactor, -1.0 ,1.0);
//    glOrtho(-0.9, 0.9, -0.9, 0.9, -1.0 ,1.0);
  end;
  if Key = 109 then begin                                  // Gray -
    glOrtho(-1.0-fFactor, 1.0+fFactor, -1.0-fFactor, 1.0+fFactor, -1.0 ,1.0);
    // glOrtho(-1.1, 1.1, -1.1, 1.1, -1.0 ,1.0);
  end;
  if Key = 37 then begin                                  // Left
    glOrtho(-0.9, 1.1, -1.0, 1.0, -1.0 ,1.0);
  end;
  if Key = 39 then begin                                  // Right
    glOrtho(-1.1, 0.9, -1.0, 1.0, -1.0 ,1.0);
  end;
  if Key = 38 then begin                                  // Up
    glOrtho(-1.0, 1.0, -1.1, 0.9, -1.0 ,1.0);
  end;
  if Key = 40 then begin                                  // down
    glOrtho(-1.0, 1.0, -0.9, 1.1, -1.0 ,1.0);
  end;

  if (Key = 13) and (FKeys[16]) then begin
    IdleTimer.Enabled := False;
    FormChoosePlane := TFormChoosePlane.Create(Self);
    if B747.PlaneType = planePassenger then FormChoosePlane.rbPassenger.Checked := True
                                      else FormChoosePlane.rbCargo.Checked := True;
    if B747.EnginesType = etGE then FormChoosePlane.rbEngGE.Checked := True;
    if B747.EnginesType = etRR then FormChoosePlane.rbEngRR.Checked := True;
    if B747.EnginesType = etPW then FormChoosePlane.rbEngPW.Checked := True;

    FormChoosePlane.FGEN1Mul :=  B747.FSPlane.FlightModel.GESettings.N1Multiply;
    FormChoosePlane.FGEN1Add :=  B747.FSPlane.FlightModel.GESettings.N1Add;
    FormChoosePlane.FGEN2Mul :=  B747.FSPlane.FlightModel.GESettings.N2Multiply;
    FormChoosePlane.FGEN2Add :=  B747.FSPlane.FlightModel.GESettings.N2Add;

    FormChoosePlane.FRRN1Mul :=  B747.FSPlane.FlightModel.RRSettings.N1Multiply;
    FormChoosePlane.FRRN1Add :=  B747.FSPlane.FlightModel.RRSettings.N1Add;
    FormChoosePlane.FRRN2Mul :=  B747.FSPlane.FlightModel.RRSettings.N2Multiply;
    FormChoosePlane.FRRN2Add :=  B747.FSPlane.FlightModel.RRSettings.N2Add;

    FormChoosePlane.FPWN1Mul :=  B747.FSPlane.FlightModel.PWSettings.N1Multiply;
    FormChoosePlane.FPWN1Add :=  B747.FSPlane.FlightModel.PWSettings.N1Add;
    FormChoosePlane.FPWN2Mul :=  B747.FSPlane.FlightModel.PWSettings.N2Multiply;
    FormChoosePlane.FPWN2Add :=  B747.FSPlane.FlightModel.PWSettings.N2Add;

    FormChoosePlane.cbUseFixedEGTFactor.Checked    := B747.FSPlane.FlightModel.UseFixedEGTFactor;
    FormChoosePlane.RxCalcEditFixedEGTFactor.Value := B747.FSPlane.FlightModel.FixedEGTFactor;

    FormChoosePlane.cbAftFuel.Checked := B747.FSPlane.FlightModel.HasAftFuel;

    FormChoosePlane.rbPlaneClick(Nil);
    FormChoosePlane.rbEngClick(Nil);
    FormChoosePlane.cbUseFixedEGTFactorClick(Nil);

    if FormChoosePlane.ShowModal = mrOk then begin
      if FormChoosePlane.rbPassenger.Checked then B747.PlaneType := planePassenger;
      if FormChoosePlane.rbCargo.Checked    then B747.PlaneType := planeCargo;
      if FormChoosePlane.rbEngGE.Checked then B747.EnginesType := etGE;
      if FormChoosePlane.rbEngRR.Checked then B747.EnginesType := etRR;
      if FormChoosePlane.rbEngPW.Checked then B747.EnginesType := etPW;

      B747.FSPlane.FlightModel.GESettings.N1Multiply := FormChoosePlane.FGEN1Mul;
      B747.FSPlane.FlightModel.GESettings.N1Add      := FormChoosePlane.FGEN1Add;
      B747.FSPlane.FlightModel.GESettings.N2Multiply := FormChoosePlane.FGEN2Mul;
      B747.FSPlane.FlightModel.GESettings.N2Add      := FormChoosePlane.FGEN2Add;

      B747.FSPlane.FlightModel.RRSettings.N1Multiply := FormChoosePlane.FRRN1Mul;
      B747.FSPlane.FlightModel.RRSettings.N1Add      := FormChoosePlane.FRRN1Add;
      B747.FSPlane.FlightModel.RRSettings.N2Multiply := FormChoosePlane.FRRN2Mul;
      B747.FSPlane.FlightModel.RRSettings.N2Add      := FormChoosePlane.FRRN2Add;

      B747.FSPlane.FlightModel.PWSettings.N1Multiply := FormChoosePlane.FPWN1Mul;
      B747.FSPlane.FlightModel.PWSettings.N1Add      := FormChoosePlane.FPWN1Add;
      B747.FSPlane.FlightModel.PWSettings.N2Multiply := FormChoosePlane.FPWN2Mul;
      B747.FSPlane.FlightModel.PWSettings.N2Add      := FormChoosePlane.FPWN2Add;

      B747.FSPlane.FlightModel.UseFixedEGTFactor := FormChoosePlane.cbUseFixedEGTFactor.Checked;
      B747.FSPlane.FlightModel.FixedEGTFactor    := FormChoosePlane.RxCalcEditFixedEGTFactor.Value;

      B747.FSPlane.FlightModel.HasAftFuel := FormChoosePlane.cbAftFuel.Checked ;

      B747.Initialize;
    end;
    IdleTimer.Enabled := True;
  end;
  FormPaint(Self);
end;


procedure TFormEICAS.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  OldKeys : Array[0..255] of Boolean;
  iIdx    : Integer;
begin
  for iIdx := 0 to 255 do begin
    OldKeys[iIdx] := FKeys[iIdx];
  end;
  FKeys[(Key and $FF)] := False;
  if Key = 112 then begin                            // F1 is released
    FShowEICASKeys := False;
    UpdateCaption;
    FormPaint(Nil);
  end;
  UpdateCaption;
end;


Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester