読者です 読者をやめる 読者になる 読者になる

フラフラまわる

<UserControl x:Class="SinWave.Page"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  Width="400" Height="300" Loaded="UserControl_Loaded" >
  <Canvas x:Name="LayoutRoot" Background="White">
    <Path x:Name="target" Fill="AliceBlue" Stroke="Blue" StrokeThickness="1">
      <Path.Data>
        <EllipseGeometry RadiusX="20" RadiusY="20" />
      </Path.Data>
      <Path.RenderTransform>
        <TransformGroup>
          <TranslateTransform Y="140" X="200" />
        </TransformGroup>
      </Path.RenderTransform>
    </Path>
  </Canvas>
</UserControl>
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
  var loop = new Loop();
  loop.Fire += Loop_Fire;
}

private const double Range = 100d;
private const double Speed = 0.06;

private double angleY = 0;
private double angleX = 0;

private void Loop_Fire(object sender, EventArgs e)
{
  target.SetValue(Canvas.TopProperty, (Range * Math.Sin(angleY)));
  target.SetValue(Canvas.LeftProperty, ((Range * 1.5) * Math.Sin(angleX)));
  angleY += Speed;
  angleX += Speed / 2;
}


これも、画像じゃよくわかりませんな・・・。


で、これを利用して Math.Sin に順次値が大きくなる角度と係数をかけたものを位置に置き換える。


Sin波!