Mega Code Archive

 
Categories / Silverlight / Graphics
 

Vector Angles

<UserControl x:Class='SilverlightApplication3.MainPage'     xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'      xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'     xmlns:d='http://schemas.microsoft.com/expression/blend/2008'      xmlns:mc='http://schemas.openxmlformats.org/markup-compatibility/2006'      mc:Ignorable='d'      d:DesignWidth='640' d:DesignHeight='480'>   <Canvas x:Name="LayoutRoot" Background="White" Width="800" Height="600">     <TextBlock Text="TextBlock" TextWrapping="Wrap" Width="228.695" Height="85.537" Canvas.Top="506.463" Canvas.Left="560.305" x:Name="msgBlock"/>     <Path Height="1" Width="91.109" Canvas.Left="365" Canvas.Top="527" Data="M160,167 L384.10934,167" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" RenderTransformOrigin="0.5,0.5" x:Name="testLine">       <Path.RenderTransform>         <TransformGroup>           <ScaleTransform/>           <SkewTransform/>           <RotateTransform x:Name="testLineAngle" Angle="0"/>           <TranslateTransform/>         </TransformGroup>       </Path.RenderTransform>     </Path>     <Slider Width="151" Canvas.Top="32" Canvas.Left="638" Maximum="100" x:Name="p1XSlider" SmallChange="1"/>     <TextBlock Text="Point 1 X:" TextWrapping="Wrap" Canvas.Top="8" Canvas.Left="638" x:Name="msgP1XSlider"/>     <Slider Width="151" Canvas.Top="92" Canvas.Left="638" Maximum="100" x:Name="p1YSlider" SmallChange="1"/>     <TextBlock Text="Point 1 Y:" TextWrapping="Wrap" Canvas.Top="68" Canvas.Left="638" x:Name="msgP1YSlider"/>     <Slider Width="151" Canvas.Top="147" Canvas.Left="638" Maximum="100" x:Name="p2XSlider" SmallChange="1"/>     <TextBlock Text="Point 2 X:" TextWrapping="Wrap" Canvas.Top="123" Canvas.Left="638" x:Name="msgP2XSlider"/>     <Slider Width="151" Canvas.Top="200" Canvas.Left="638" Maximum="100" x:Name="p2YSlider" SmallChange="1"/>     <TextBlock Text="Point 2 Y:" TextWrapping="Wrap" Canvas.Top="176" Canvas.Left="638" x:Name="msgP2YSlider"/>     <Border Height="600" Width="800" BorderThickness="1,1,1,1" BorderBrush="#FF000000"/>   </Canvas> </UserControl> //File: Page.xaml.cs using System; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace SilverlightApplication3 {     public partial class MainPage : UserControl     {         Line myLine = new Line();         Point p1 = new Point();         Point p2 = new Point();         Point vectorLength = new Point();         double angle;         public MainPage()         {             InitializeComponent();             p1.X = 0;             p1.Y = 0;             p2.X = 250;             p2.Y = 250;             myLine.X1 = p1.X;             myLine.Y1 = p1.Y;             myLine.X2 = p2.X;             myLine.Y2 = p2.Y;             myLine.StrokeThickness = 1;             SolidColorBrush stroke = new SolidColorBrush();             stroke.Color = Colors.Black;             myLine.Stroke = stroke;             doAngle();             LayoutRoot.Children.Add(myLine);             p1XSlider.Maximum = p2XSlider.Maximum = LayoutRoot.Width;             p1YSlider.Maximum = p2YSlider.Maximum = LayoutRoot.Height;             p1XSlider.Value = myLine.X1;             p1YSlider.Value = myLine.Y1;             p2XSlider.Value = myLine.X2;             p2YSlider.Value = myLine.Y2;             msgP1XSlider.Text = "Point 1 X: " + (Int16)myLine.X1;             msgP1YSlider.Text = "Point 1 Y: " + (Int16)myLine.Y1;             msgP2XSlider.Text = "Point 2 X: " + (Int16)myLine.X2;             msgP2YSlider.Text = "Point 2 Y: " + (Int16)myLine.Y2;             p1XSlider.ValueChanged += new RoutedPropertyChangedEventHandler<double>(p1XSlider_ValueChanged);             p1YSlider.ValueChanged += new RoutedPropertyChangedEventHandler<double>(p1YSlider_ValueChanged);             p2XSlider.ValueChanged += new RoutedPropertyChangedEventHandler<double>(p2XSlider_ValueChanged);             p2YSlider.ValueChanged += new RoutedPropertyChangedEventHandler<double>(p2YSlider_ValueChanged);         }         private void p2YSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)         {             myLine.Y2 = p2YSlider.Value;             msgP2YSlider.Text = "Point 2 Y: " + Convert.ToInt16(p2YSlider.Value);             doAngle();         }         private void p2XSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)         {             myLine.X2 = p2XSlider.Value;             msgP2XSlider.Text = "Point 2 X: " + Convert.ToInt16(p2XSlider.Value);             doAngle();         }         private void p1YSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)         {             myLine.Y1 = p1YSlider.Value;             msgP1YSlider.Text = "Point 1 Y: " + Convert.ToInt16(p1YSlider.Value);             doAngle();         }         private void p1XSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)         {             myLine.X1 = p1XSlider.Value;             msgP1XSlider.Text = "Point 1 X: " + Convert.ToInt16(p1XSlider.Value);             doAngle();         }         private void doAngle()         {             vectorLength.X = myLine.X2 - myLine.X1;             vectorLength.Y = myLine.Y2 - myLine.Y1;             double radians = Math.Atan2(vectorLength.Y, vectorLength.X);             angle = Convert.ToInt16(180 / Math.PI * radians);             testLineAngle.Angle = angle;             msgBlock.Text = "Vector X,Y: " + Convert.ToInt16(vectorLength.X) + ", " + Convert.ToInt16(vectorLength.Y) + "\nAngle: " + angle;         }     } }