【问题标题】:Convert value to Angle with maximum value将值转换为具有最大值的角度
【发布时间】:2020-12-04 06:56:26
【问题描述】:

我做了一个速度表控件我的控制器有一个名为 Angle 的属性,它可以改变我的速度表的形状(180 表示完整的循环,等等...)

借助转换器,我可以正确移动速度计

// values[0] = Angle
// values[1] = Value

var startAngle = System.Convert.ToDouble(values[0]) * -1;
var endAngle = startAngle + (((double)values[1]) * 2);
return endAngle;

现在我想要一个叫Maximum的属性,如果用户把它设置为50,即使我的圆是360度,整个圆也会有50个值。

我使用了以下代码,但不幸的是它不能正常工作

return value * angle / maximum;

这也是我的弧线

<x:Arc StartAngle="{Binding Angle, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource Positive2Nagative}}" EndAngle="{Binding Angle, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>   

 

更新:

这段代码:

//a = s * A / max
value * angle / maximum;

编译成这样:

<loc:speedometer Angle="120" MaximumValue="50" Value="{Binding ElementName=sld, Path=Value}"
                           />

更新 2:

我修复了这段代码的问题

return ((value * angle / maximumValue * 2) - angle);

【问题讨论】:

  • @Sinatr 不,我想将值转换为具有最大属性的角度
  • 这不是minimal reproducible example - 现在可以帮助您...
  • 你提到 360 度和 180 度,不知何故你的起始角度是负的。你的speedo应该是什么样子的?什么角度为零,最大等于什么角度?
  • @Andy Arc Control 有 2 个属性,称为 StartAngle 和 EndAngle 如果 startAngle 为 0,endAngle 为 360,我们有一个完整的圆,如果 startAngle 为 -180,endAngle 为 180,我们有一个完整的圆如果 startAngle 为 -120,endAngle 为 120,我们也几乎是一个半圆形

标签: c# wpf


【解决方案1】:

你为此使用了一个非常奇怪的符号。

我们将值 1 的变化称为一步。所以最大 50 公里/小时意味着 50 步。

您希望在开始和结束之间有 50 步。

你的首要任务是计算出每一步的角度。

为此,您需要知道整个弧将经过的角度。

如果起点总是在垂直线的左边,那么它总是负数。

因此您希望 -1 * 从垂直方向偏移的左侧度数开始。

权利很简单,只是结束。

因此(-1 * 开始)+ 结束 = 总弧度

这会告诉你从 0 到最大覆盖的度数。

让我们把你所代表的东西称为速度。因为角度对于计算中与角度有关的变量来说是一个非常非常糟糕的名称。

totalArc / maximum 给出了我们速度中每一步的度数。

因此您想要(总弧/最大)* 速度。

这为您提供了起点和速度指示器应该到达的位置之间的角度。

然后你必须弄清楚这对你的显示意味着什么。

我建议最简单的方法是旋转变换任何红色的东西,使 0 角度与开始相匹配。也许你已经在这样做了。

【讨论】:

    【解决方案2】:

    我认为您正在寻找以下内容:

    给定一个角度a,等效值s,考虑到A度表示最大值max,是:

     s = a * max / A
    

    或者可能更有用的是,角度a 表示A 度车速表中的给定速度s,最大速度max 是:

    a = s * A / max
    

    也就是说,我不太确定您的速度计是如何工作的。一开始你谈论的是一个 180º 的仪表,然后你开始谈论一个完整的 360º 的仪表。无论哪种方式,A 要么是 180 要么是 360

    【讨论】:

    • Arc Control 有 2 个属性,称为 StartAngle 和 EndAngle 如果 startAngle 为 0,endAngle 为 360,我们有一个完整的圆,如果 startAngle 为 -180,endAngle 为 180,我们又是一个完整的圆同样如果 startAngle 是 -120 而 endAngle 是 120 我们几乎是一个半圆形
    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2017-01-21
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多