2017-11-16 13 views
-2

私はWPFとC#を使って線を描こうとしていますが、以下の問題に直面しています。WPF中心点からの角度で線を回転

イメージング私は固定長の線を描く必要があり、この線を所定の角度で回転させる必要があります。 45度とする。 しかし、私は中心点からこれを回転させるべきです。 きれいに理解できるように画像を添付しています。

descriptive image

いずれかは、C#のプログラムを書くために私を助けてください。

+1

どのような画像/描画APIを使用して線を描画していますか?またはWPFビューの行で、これを回転しようとしていますか? –

答えて

2

カスタム角度で線を回転するには、RotateTransformを適用します。 RenderTransformOriginプロパティを0.5 0.5に設定すると、中心点を中心に回転することができます。

<Grid Width="200" Height="200"> 
    <Line X1="0" Y1="0" X2="1" Y2="0" Stretch="Uniform" Stroke="Blue" StrokeThickness="2" RenderTransformOrigin="0.5 0.5"> 
     <Line.RenderTransform> 
      <RotateTransform Angle="45" /> 
     </Line.RenderTransform> 
    </Line> 
</Grid> 

角度が固定されている場合(例えば、常に同じ)、あなたは開始点と終了点の座標を計算し、変換を使用せずに斜めの線を描くことができます:

<Line X1="0" Y1="0" X2="200" Y2="200" Stroke="Blue" StrokeThickness="2" /> 
0

は、ここでの考え方です、あなたは、それを改善に必要なものにそれを形作るために必要

private void Rotate() 
    { 
     while (Degrees >= 360) 
      Degrees -= 360; 
     while (Degrees <= -360) 
      Degrees += 360; 

     X1 = 0; 
     Y1 = 0; 
     var rad = Degrees * Math.PI/180; 
     const int radius = 100; 
     var sin = Math.Sin(rad); 
     var cos = Math.Cos(rad); 
     var tan = Math.Tan(rad); 

     Y2 = sin * radius; 
     X2 = cos * radius; 

    } 

XAML

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <StackPanel Grid.Row="0" Orientation="Horizontal" > 
     <Label Content="Rotation" /> 
     <TextBox Text="{Binding Degrees}" Width="50" Margin="5,5,0,5" HorizontalContentAlignment="Right" VerticalContentAlignment="Center"/> 
     <Label Content="°" /> 
     <Button Content="Rotate" Margin="5" Command="{Binding RotateCommand}"/> 
    </StackPanel> 
    <Grid Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" > 
     <Line Stroke="Red" X1="{Binding X1}" X2="{Binding X2}" Y1="{Binding Y1}" Y2="{Binding Y2}"/> 
    </Grid> 
</Grid> 
関連する問題