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
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>
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...
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.
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;