グリグリまわす
さて、いつまで続くことやら。
<Grid x:Name="LayoutRoot" Background="White"> <Path HorizontalAlignment="Center" VerticalAlignment="Center" Fill="AliceBlue" StrokeThickness="1" Stroke="Blue" x:Name="target" RenderTransformOrigin="0.5,0.5"> <Path.RenderTransform> <RotateTransform x:Name="rotateTransform" /> </Path.RenderTransform> <Path.Data> <PathGeometry FillRule="EvenOdd"> <PathGeometry.Figures> <PathFigure StartPoint="0,50" IsClosed="True"> <LineSegment Point="50,100" /> <LineSegment Point="100,50" /> <LineSegment Point="50,0" /> </PathFigure> <PathFigure StartPoint="100,50" IsClosed="True"> <LineSegment Point="90,60" /> <LineSegment Point="80,50" /> <LineSegment Point="90,40" /> </PathFigure> </PathGeometry.Figures> </PathGeometry> </Path.Data> </Path> </Grid>
private void UserControl_MouseMove(object sender, MouseEventArgs e) { var mousePosition = e.GetPosition(null); var x = mousePosition.X - (this.ActualWidth / 2); //マウスのX - ターゲットの中央X var y = mousePosition.Y - (this.ActualHeight / 2); //マウスのY - ターゲットの中央Y var radians = Math.Atan2(y, x); rotateTransform.Angle = radians * 180 / Math.PI; }
タンジェントは対辺/隣辺らしい。そんでもってアークタンジェントはタンジェントの角度らしい。で、Atan2 の "2" は隣辺と対辺を放り込んだらよきにはからって角度を出してくれるらしい。単なる Atan だと、隣辺と対辺でどちらかが - で どちらかが + のときに符号を逆にしても同じ結果になるから、角度もおんなじになってしまうらしい。
中学生からやり直しやな・・・。