改变0度旋转的位置?

时间:2015-03-09 13:16:19

标签: c# wpf angle direction degrees

我有一个带有一些物体的画布,我可以根据输入的一些数字旋转它们,其中0表示向上,90表示向右,180表示向下,270表示向左。无论如何要改变0度的位置?现在我假设画布背景图像向北直线(它是一张地图),但如果我有一个图像,其中0度北向左,我不能正确旋转我的对象,除非我可以改变在哪里原来的0度是。我以为我可以让用户选择0度的位置,但似乎我只能通过用户选择一个点来检索必要的信息。有什么想法吗?

示例:我有一张地图。 0度是左边(270将是)。用户知道这一点,但程序没有。程序认为0度仍然是北方。因此,如果用户想要显示他的标题,他将不得不将两个0度的偏移量添加到他的标题。不知道如何获得那个偏移量。

第一个想法:我在想是否得到画布的中心点,并让用户点击0所在的点,并获得中心点WOULD必须旋转到的角度才能面对新的0

2 个答案:

答案 0 :(得分:2)

如果你有viewmodel,那么将它绑定到computed属性:

XAML:

<RotateTransform Angle="{Binding FinalRotationAngle}" />

C#:

private double _northOrientationAngle;
private double _mapRotationAngle;


public double MapRotationAngle
{
    get { return _mapRotationAngle; }
    set
    {
        _mapRotationAngle= value;
        OnPropertyChanged("MapRotationAngle");
        OnPropertyChanged("FinalRotationAngle");
    }
}

public double NorthOrientationAngle
{
    get { return _northOrientationAngle; }
    set
    {
        _northOrientationAngle= value;
        OnPropertyChanged("NorthOrientationAngle");
        OnPropertyChanged("FinalRotationAngle");
    }
}

public double FinalRotationAngle
{
    get { return NorthOrientationAngle + MapRotationAngle; }
}

现在您可以配置北向和用户定义的方向。

如果你有mvvm的自定义控件,你可以使用DependecyProperties和PropertyChanged回调实现相同的

答案 1 :(得分:0)

怎么样:

private double neutralPosition;

public void SetNeutralPosition(double position)
{
    this.neutralPosition = position;
}

public double Rotate(double angle)
{
    return this.neutralPosition + angle;
}

所以这个想法是:你使用SetNeutralPosition来设置你的“0”相对于REAL 0度位置的位置。然后你可以使用Rotate方法(用你的相对旋转度)来获得“真正的”旋转。