Einzelnen Beitrag anzeigen

JulianT
(Gast)

n/a Beiträge
 
#1

Umrechnung Kosinuswert/Winkel

  Alt 8. Mär 2015, 20:56
Schönen guten Abend,
ich bin neu im Bereich der Delphi Programmierung und es ist auch meine erste Programmiersprache. Ich habe nun folgendes Problem in Bezug auf Vektorenrechnung, an die ich mich herangetraut habe. Ich berechne Skalarprodukt, sowie Vektorbeträge von A und B. Später dann den cos_alpha Wert und lasse diesen ausgeben. Bei der folgenden Sache hapere ich nun. Ich möchte den cos Wert umrechnen in einen Winkel, aber da kommt dann immer nur ein Wert wie -0,99 oder 0,99 keine Ahnung, ich hab das Projekt leider nicht am Manne, nur den Quellcode dazu.

Kann mir jemand vlt bei meinem Problem helfen? Danke sehr!

Code:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    ButtonBerechne: TButton;
    ButtonAbbruch: TButton;
    Label1: TLabel;
    EditAx: TEdit;
    Label2: TLabel;
    EditAy: TEdit;
    Label3: TLabel;
    EditAz: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    EditBx: TEdit;
    Label6: TLabel;
    EditBy: TEdit;
    Label7: TLabel;
    EditBz: TEdit;
    Label8: TLabel;
    Label9: TLabel;
    EditBetragA: TEdit;
    Label10: TLabel;
    EditBetragB: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    EditCx: TEdit;
    Label14: TLabel;
    EditCy: TEdit;
    Label15: TLabel;
    EditCz: TEdit;
    Label16: TLabel;
    EditSkalarprodukt: TEdit;
    EditWinkel: TEdit;
    Label17: TLabel;
    EditCoswinkel: TEdit;
    procedure ButtonAbbruchClick(Sender: TObject);
    procedure ButtonBerechneClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonAbbruchClick(Sender: TObject);
begin
Close;
end;

function ArcCos(x:real):real;
begin
    if x=0
      then Result:= Pi/2
      else Result:= ArcTan(sqrt(1-sqr(x))/x);
    if Result<0 then Result:= Result+Pi;
end;

function BogenZuGrad(AlphaBog:real):real;
begin
    result:=((2*Pi)/(360))*alphaBog;
{  result:=180*alphaBog/Pi;     }
end;


procedure TForm1.ButtonBerechneClick(Sender: TObject);

var VektorA, VektorB, Vektor0 : array[1..3] of integer;
    skalarprodukt : integer;
    betragA, betragB, cos_alpha, alphaBog, alphaGrad : real;

begin
//Jetzt werden die Werte eingelesen
VektorA[1]:=StrToInt(EditAx.Text);
VektorA[2]:=StrToInt(EditAy.Text);
VektorA[3]:=StrToInt(EditAz.Text);
VektorB[1]:=StrToInt(EditBx.Text);
VektorB[2]:=StrToInt(EditBy.Text);
VektorB[3]:=StrToInt(EditBz.Text);

//Berechnen und Ausgeben des Skalarproduktes
skalarprodukt:= vektorA[1]*vektorB[1]+VektorA[2]*VektorB[2]+VektorA[3]*VektorB[3];
EditSkalarprodukt.Text:=IntToStr(skalarprodukt);

//Ausgeben des Vektorbetrages A
BetragA:= sqrt(sqr(VektorA[1])+sqr(VektorA[2])+sqr(VektorA[3]));
EditBetragA.Text:=FloatToStr(BetragA);

//Ausgeben des Vektorbetrages B
BetragB:= sqrt(sqr(VektorB[1])+sqr(VektorB[2])+sqr(VektorB[3]));
EditBetragB.Text:=FloatToStr(BetragB);

//Berechnen des Vektorenwinkels
cos_alpha:=skalarprodukt/(BetragA*BetragB);
EditCoswinkel.Text:=FloatToStr(cos_alpha);
EditWinkel.Text:=FloatToStr(BogenZuGrad(alphaGrad));
end;

end.

Geändert von JulianT ( 8. Mär 2015 um 21:05 Uhr)
  Mit Zitat antworten Zitat