65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 航空仪表控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.91/5 (70投票s)

2008年7月1日

CPOL

2分钟阅读

viewsIcon

350531

downloadIcon

25644

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

引言

这个 C# 项目的目的是提供六种可用于窗体(如同任何其他 C# 控件)的飞机驾驶舱仪表,并定义一个通用的仪表类,以便设计任何类型的仪表盘仪表。

描述

这些控件使用位图构建,在显示之前会对位图进行旋转、平移或缩放。旋转、平移和缩放图像的基本方法在母类中定义。然后,每个控件使用其专用参数(与物理意义相关)来操作图像。

飞机仪表

  • 空速指示器:空速(节)
  • 姿态指示器:俯仰角(度)、滚转角(度)
  • 高度表:高度(英尺)
  • 转弯协调器:转弯速率(度/分钟)
  • 垂直速度指示器:垂直速度(英尺/分钟)
  • 航向指示器:航向(度)

关键函数详解

本节详细解释了在 InstrumentControl 类中定义的的基本函数的实现。

旋转图像

实现

图像的旋转分为两个主要部分

首先,围绕绘图区域的左上角旋转 PaintEventArgs 坐标系。

其次,通过平移偏移校正绘制图像,以便将图像显示为围绕用户定义的点旋转。

AvionicsControlDemo_RotationMainSteps.JPG

让我们逐步来看

步骤 0:初始情况。

AvionicsControlDemo_RotationPhase0.JPG

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

AvionicsControlDemo_RotationPhase1.JPG

相应的代码示例

// Rotate image support
pe.Graphics.RotateTransform((float)(alpha * 180 / Math.PI));

步骤 2:绘制图像并应用平移校正。

AvionicsControlDemo_RotationPhase2.JPG

相应的代码示例

// Display image
pe.Graphics.DrawImage(img, (ptImg.X + deltaX) * scaleFactor, (ptImg.Y + deltaY) * 
	scaleFactor, img.Width * scaleFactor, img.Height * scaleFactor);

步骤 3(最终步骤):将 PainEventArgs 坐标系恢复到初始状态。

AvionicsControlDemo_RotationPhase3.JPG

相应的代码示例

// Put image support as found
pe.Graphics.RotateTransform((float)(-alpha * 180 / Math.PI));

这些操作的关键点是计算平移校正系数。

下图解释了几何考虑因素

AvionicsControlDemo_RotationDetailedScheme.JPG

G0 是用户定义的旋转中心
G1 是步骤 1 后的 G0 位置。

本节的目的是识别 G1G0 平移并应用相应的偏移,以便将旋转点绘制为未移动的状态。

然后我们使用几何定义

a. AvionicsControlDemo_RotationCalcs1.JPG
b. AvionicsControlDemo_RotationCalcs2.JPG
c. AvionicsControlDemo_RotationCalcs3.JPG
d. AvionicsControlDemo_RotationCalcs4.JPG

因此,偏移系数为

AvionicsControlDemo_RotationCalcs5.JPG

相应的代码示例如下

// 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”:显示图像的缩放因子

AvionicsControlDemo_RotationFunctionParameters.JPG

© . All rights reserved.