IFC 4.3.2.20251031 (IFC4X3_ADD2) under development

8.11.2.10 IfcCompoundPlaneAngleMeasure(复合平面角测量)

8.11.2.10.1 语义定义(Semantic definition)

IfcCompoundPlaneAngleMeasure 是一种以度、分、秒及可选的百万分之一秒弧度为单位的复合平面角测量方法。

类型:LIST [3:4] OF INTEGER

数值限制

  • 第一个整数测量值表示度数,通常不受范围限制。但当 IfcCompoundPlaneAngleMeasure 用于表示地理坐标时,实践中仅使用纬度[-90, 90]和经度[-180, 180]。
  • 第二个整数测量值表示分钟数,应在(-60, 60)范围内。
  • 第三个整数测量值表示秒数,应在(-60, 60)范围内。
  • 可选的第四个整数测量值表示百万分之一秒数,应在(-1 000 000, 1 000 000)范围内。

符号规则

所有测量分量具有相同的符号(正或负)。因此,无论角度大于还是小于零,在浮点表示(十进制度数)和复合表示之间进行转换都很简单。示例:

```

LOCAL a : IfcPlaneAngleMeasure := -50.975864; (* 十进制度数, -50° 58' 33" 110400 *) b : IfcPlaneAngleMeasure; c : IfcCompoundPlaneAngleMeasure; s : IfcText; END_LOCAL;

(* 从浮点数转换为复合值 *) c[1] := a; -- -50 c[2] := (a - c[1]) * 60; -- -58 c[3] := ((a - c[1]) * 60 - c[2]) * 60; -- -33 c[4] := (((a - c[1]) * 60 - c[2]) * 60 - c[3]) * 1.e6; -- -110400

(* 从复合值转换为浮点数 *) b := c[1] + c[2]/60. + c[3]/3600. + c[4]/3600.e6; -- -50.975864

```

在字符串表示中的使用

当为显示或打印格式化复合平面角测量值时,通常会忽略小数分量的符号,因为对人类读者而言,仅第一个分量的符号就足以表示角度的方向:

```

(* 从复合表示转换为人类可读字符串 *) s := FORMAT(c[1], '+##') + "000000B0" + FORMAT(ABS(c[2]), '##') + '''' + FORMAT(ABS(c[3]), '##') + '"' + FORMAT(ABS(c[4]), '##'); -- -50° 58' 33" 110400

```

另一种常见的经纬度显示格式是省略符号,改用N、S、E、W指示符,例如:

50°58'33"S

。然而,当存储为 IfcCompoundPlaneAngleMeasure 时,复合平面角测量始终带有符号,且所有分量具有相同的符号。

8.11.2.10.2 形式化命题(Formal propositions)

MinutesInRange<html><body><p>第二个测量值(分钟)应在-60(不含)到60(不含)之间。</p></body></html>
ABS(SELF[2]) < 60
SecondsInRange<html><body><p>第三个测量值(秒)应在-60(不含)到60(不含)之间。</p></body></html>
ABS(SELF[3]) < 60
MicrosecondsInRange<html><body><p>第四个测量值(百万分之一秒),如果存在,应在-1e6(不含)到1e6(不含)之间。</p></body></html>
(SIZEOF(SELF) = 3) OR (ABS(SELF[4]) < 1000000)
ConsistentSign<html><body><p>所有非零测量分量应具有相同的符号(正或负)。</p></body></html>
((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] >= 0)))
OR
((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] <= 0)))
表 8.11.2.10.A

8.11.2.10.3 形式化表示(Formal representation)

TYPE IfcCompoundPlaneAngleMeasure = LIST [3:4] OF INTEGER;
 WHERE
	 MinutesInRange : ABS(SELF[2]) < 60;
	 SecondsInRange : ABS(SELF[3]) < 60;
	 MicrosecondsInRange : (SIZEOF(SELF) = 3) OR (ABS(SELF[4]) < 1000000);
	 ConsistentSign : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] >= 0)))
OR
((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] <= 0)));
END_TYPE;

8.11.2.10.4 参考文献