フラフラまわる
<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波!