C# 航空仪表控件
这个 C# 项目的目的是提供六种可用于窗体(如同任何其他 C# 控件)的飞机驾驶舱仪表。

引言
这个 C# 项目的目的是提供六种可用于窗体(如同任何其他 C# 控件)的飞机驾驶舱仪表,并定义一个通用的仪表类,以便设计任何类型的仪表盘仪表。
描述
这些控件使用位图构建,在显示之前会对位图进行旋转、平移或缩放。旋转、平移和缩放图像的基本方法在母类中定义。然后,每个控件使用其专用参数(与物理意义相关)来操作图像。
飞机仪表
- 空速指示器:空速(节)
- 姿态指示器:俯仰角(度)、滚转角(度)
- 高度表:高度(英尺)
- 转弯协调器:转弯速率(度/分钟)
- 垂直速度指示器:垂直速度(英尺/分钟)
- 航向指示器:航向(度)
关键函数详解
本节详细解释了在 InstrumentControl
类中定义的的基本函数的实现。
旋转图像
实现
图像的旋转分为两个主要部分
首先,围绕绘图区域的左上角旋转 PaintEventArgs
坐标系。
其次,通过平移偏移校正绘制图像,以便将图像显示为围绕用户定义的点旋转。

让我们逐步来看
步骤 0:初始情况。

步骤 1:围绕油漆区域的左上角旋转 PaintEventArgs
坐标系。

相应的代码示例
// Rotate image support
pe.Graphics.RotateTransform((float)(alpha * 180 / Math.PI));
步骤 2:绘制图像并应用平移校正。

相应的代码示例
// Display image
pe.Graphics.DrawImage(img, (ptImg.X + deltaX) * scaleFactor, (ptImg.Y + deltaY) *
scaleFactor, img.Width * scaleFactor, img.Height * scaleFactor);
步骤 3(最终步骤):将 PainEventArgs
坐标系恢复到初始状态。

相应的代码示例
// Put image support as found
pe.Graphics.RotateTransform((float)(-alpha * 180 / Math.PI));
这些操作的关键点是计算平移校正系数。
下图解释了几何考虑因素

G0 是用户定义的旋转中心
G1 是步骤 1 后的 G0 位置。
本节的目的是识别 G1G0 平移并应用相应的偏移,以便将旋转点绘制为未移动的状态。
然后我们使用几何定义
a. | ![]() |
b. | ![]() |
c. | ![]() |
d. | ![]() |
因此,偏移系数为

相应的代码示例如下
// Computed offset
deltaX = (float)(d * (Math.Cos(alpha - beta) - Math.Cos(alpha)*
Math.Cos(alpha + beta) - Math.Sin(alpha) * Math.Sin(alpha+ beta)));
deltaY = (float)(d * (Math.Sin(beta - alpha) + Math.Sin(alpha)*
Math.Cos(alpha + beta) - Math.Cos(alpha) * Math.Sin(alpha + beta)));
参数
- “
pe
”:将显示图像的油漆区域事件 - “
img
”:要显示的图像 - “
alpha
”:旋转角度(弧度) - “
ptImg
”:在标称情况下,要在油漆区域中显示的图像的左上角位置 - “
ptRot
”:油漆区域中的旋转点位置 - “
scaleFactor
”:显示图像的缩放因子