Einen schönen guten Abend wünsche ich.
Ich habe zwei Berechnungstabellen, die mir Sinus, Cosinus etc. Funktionen berechnen.
Diese Codes sind aus 2006 - und da die Mathematik in Delphi immer weiter verstümmelt, denke ich, dass es an diesen Berechnungen liegt.
Wenn ich diese anwende, werden mir die dadurch berechneten Objekte verdreht und verzogen dargestellt. Wenn ich z.B. die Resultate auf beispielsweise >6< setze, "verkrüppeln" die Objekte noch mehr.
Nun wollte ich einmal fragen, ob irgendwas mit meinem Code nicht stimmt.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92:
| unit SinCosTables; interface
{$IFDEF SINCOS_INTPREC} var SinInt: array[0..359] of Real; CosInt: array[0..359] of Real; {$ENDIF}
{$IFDEF SINCOS_DECPREC} var SinDec: array[0..3599] of Real; CosDec: array[0..3599] of Real; {$ENDIF}
{$IFDEF SINCOS_KILPREC} var SinKil: array[0..35999] of Real; CosKil: array[0..35999] of Real; {$ENDIF}
implementation
{$IFDEF SINCOS_INTPREC} procedure InitSicCos_Int(); var i: integer; rad, rd: Real; begin rad := Pi/180; for i := 0 to 359 do begin rd := rad * i; SinInt[i] := sin(rd); CosInt[i] := cos(rd); end; end; {$ENDIF}
{$IFDEF SINCOS_DECPREC} procedure InitSicCos_Dec(); var i: integer; rad, rd: Real; begin rad := Pi/1800; for i := 0 to 3599 do begin rd := rad * i; SinDec[i] := sin(rd); CosDec[i] := cos(rd); end; end; {$ENDIF}
{$IFDEF SINCOS_KILPREC} procedure InitSicCos_Kil(); var i: integer; rad, rd: Real; begin rad := Pi/18000; for i := 0 to 35999 do begin rd := rad * i; SinKil[i] := sin(rd); CosKil[i] := cos(rd); end; end; {$ENDIF}
initialization
{$IFDEF SINCOS_INTPREC} InitSicCos_Int(); {$ENDIF} {$IFDEF SINCOS_DECPREC} InitSicCos_Dec(); {$ENDIF} {$IFDEF SINCOS_KILPREC} InitSicCos_Kil(); {$ENDIF} end. |
und die zweite
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138:
| unit SinCosFunctions; interface
{$IFDEF SINCOS_INTPREC} function sin(angle: Real): Real; function cos(angle: Real): Real; {$ENDIF}
{$IFDEF SINCOS_DECPREC} function sin(angle: Real): Real; function cos(angle: Real): Real; {$ENDIF}
{$IFDEF SINCOS_KILPREC} function sin(angle: Real): Real; function cos(angle: Real): Real; {$ENDIF}
const rRad = 180/Pi; rRad10 = 1800/Pi; rRad100 = 18000/Pi;
implementation
uses SinCosTables;
{$IFDEF SINCOS_INTPREC} function sin(angle: Real): Real; var i: integer; begin i := Round(angle*rRad); if i < 0 then begin while i < -360 do inc(i, 360); i := 360+i; end else while i > 360 do dec(i, 360); Result := SinInt[i]; end;
function cos(angle: Real): Real; var i: integer; begin i := Round(angle*rRad); if i < 0 then begin while i < -360 do inc(i, 360); i := 360+i; end else while i > 360 do dec(i, 360); Result := CosInt[i]; end; {$ENDIF}
{$IFDEF SINCOS_DECPREC} function sin(angle: Real): Real; var i: integer; begin i := Round(angle*rRad10); if i < 0 then begin while i < -3600 do inc(i, 3600); i := 3600+i; end else while i > 3600 do dec(i, 3600); Result := SinDec[i]; end;
function cos(angle: Real): Real; var i: integer; begin i := Round(angle*rRad10); if i < 0 then begin while i < -3600 do inc(i, 3600); i := 3600+i; end else while i > 3600 do dec(i, 3600); Result := CosDec[i]; end; {$ENDIF}
{$IFDEF SINCOS_KILPREC} function sin(angle: Real): Real; var i: integer; begin i := Round(angle*rRad100); if i < 0 then begin while i < -36000 do inc(i, 36000); i := 36000+i; end else while i > 36000 do dec(i, 36000); Result := SinKil[i]; end;
function cos(angle: Real): Real; var i: integer; begin i := Round(angle*rRad100); if i < 0 then begin while i < -36000 do inc(i, 36000); i := 36000+i; end else while i > 36000 do dec(i, 36000); Result := CosKil[i]; end; {$ENDIF}
end. |
Sorry für den Haufen von Code, aber ich habe bereits eine gesamte Engine umgeschrieben um sie auf mein Delphi 2007 zu compilen. Aber hier bleibe ich komplett drauf sitzen.
Auf jede Hilfe freue ich mich
Vielen Dank für's Durcharbeiten.
Mit schönen Grüßen:
-Mindforce
Our force; in mind.