マウス座標から角度を求めるには?

解決


HMMA  2008-02-28 04:29:13  No: 29936

マウスで3点をクリックして、1点めを原点(0)とし、2点目(1)と3点目(2)を挟む、
∠1,0,2の角度を求めたくて、Form1にLabel1を置いて、
次のように書いては見たのですが、どうしても答えが違うようです。
それに、3点目をクリックしたところで、結果を出したいのですが、これも4回目となります。
また、手取り足取りの質問ですが、よろしくお願いします。

 Var
  Mxy:array[0..2] of TPoint;
  I:Integer=0;
  TX1,TY1,TX2,TY2:Double;
  C1,C2,AGL:Double;
  
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  begin
  If I<3 then
   Begin
  Mxy[I].x:=x; Mxy[I].y:=y;

  I:=I+1;
  end
  else
   If (I>2) then  //3回クリックしたら角度計算
   begin
 
    TX1:=(Mxy[1].x-Mxy[0].x);
    TY1:=(Mxy[1].y-Mxy[0].y);
    TX2:=(Mxy[2].x-Mxy[0].x);
    TY2:=(Mxy[2].y-Mxy[0].y);
    C1:= ArcTan2(TY1,TX1);
    C2:= ArcTan2(TY2,TX2);

  AGL:=C1-C2;
  Label1.Caption:='角度:'+FloatToStr(AGL);//結果表示

 //点検用
  Canvas.MoveTo(Mxy[2].x,Mxy[2].y);
  Canvas.lineTo(Mxy[0].x,Mxy[0].y);
  Canvas.lineTo(Mxy[1].x,Mxy[1].y);
  I:=0;
   end;
end;
end.


KHE00221  2008-02-28 05:11:20  No: 29937

こうだな

procedure TForm4.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin

    Mxy[I].x:=x; Mxy[I].y:=y;
    Inc(I);

    If (I>2) then  //3回クリックしたら角度計算
    begin

      TX1:=(Mxy[1].x-Mxy[0].x);
      TY1:=(Mxy[1].y-Mxy[0].y);
      TX2:=(Mxy[2].x-Mxy[0].x);
      TY2:=(Mxy[2].y-Mxy[0].y);
      C1:= ArcTan2(TY1,TX1);
      C2:= ArcTan2(TY2,TX2);

      AGL:=C1-C2;
      Label1.Caption:='角度:'+FloatToStr(AGL);//結果表示

       //点検用
      Canvas.MoveTo(Mxy[2].x,Mxy[2].y);
      Canvas.lineTo(Mxy[0].x,Mxy[0].y);
      Canvas.lineTo(Mxy[1].x,Mxy[1].y);
      I:=0;

    end;

end;


HMMA  2008-02-28 17:18:47  No: 29938

KHE00221さん、いつも有難うございます。

3点指示で表示出来るように成りました。
If I<3 thenは要らなかったんですね。知能テストを受けているようです(^^ゞ

ところで、角度の表し方は、
度、ラジアン、サイクル、グラード 等、普段なじみのない角度の表し方があるようですが
今回の場合、Label1に表示される角度の単位は何でしょう?
てっきり、「度」で表示されるものと思っていましたが、違うみたいですね。


ん?  2008-02-28 17:33:26  No: 29939

Helpで「ArcTan2」を読むと「ラジアン」と書いていない?


HMMA  2008-02-28 17:57:51  No: 29940

>Helpで「ArcTan2」
戻り値は,-Pi 〜 Pi ラジアンになります。

書いてありました。
Helpを見てArcTan2を使ったのに・・・

ん? さん、KHE00221さん有難うございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加