如何解决将值转换为具有最大值的角度
我做了一个速度表控件。我的控制器具有一个名为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;
现在,我要拥有一个名为“最大值”的属性,并且如果用户将其设置为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);
解决方法
我认为您正在寻找以下内容:
鉴于角度a
,考虑到s
度代表最大值A
,等效值max
为:
s = a * max / A
或者更有用的是,在a
度车速表中以最大速度s
重新表示给定速度A
的角度max
为:
a = s * A / max
也就是说,我不太确定您的车速表是如何工作的。首先,您要谈论一个180º的量规,然后再开始谈论一个完整的360º的量规。无论哪种方式,A
都是180
或360
。
为此您使用了一个非常奇怪的符号。
让我们将值更改为1一步。因此,最高时速50公里意味着50步。
您希望起点和终点之间有50步。
您的首要任务是逐步确定角度。
为此,您需要知道整个圆弧将通过的角度。
如果起点始终位于垂直线的左侧,那么它将始终为负。
因此,您要从垂直方向向左偏移左度-1 *。
右边很简单,它就结束了。
因此(-1 *开始)+结束= totalArc度
这将为您提供0到最大覆盖度。
我们称您所代表的速度。因为在所有与角度有关的计算中,角度是变量的非常不好的称呼。
totalArc / maximum给出速度中每一步的度数。
想要的(总弧度/最大)*速度。
这为您提供了起点与速度指示器应到达的角度。
然后,您必须弄清楚显示的意义。
我建议最简单的方法是旋转转换红色的东西,以便0角度与起点匹配。也许您已经在这么做了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。