05 - 坐标、角度与单位¶
本章列出 LESS 使用的坐标系、角度和单位,供建模和查阅时参考。
坐标系¶
场景坐标原点位于地面的西北角,Z 轴向上:
| 轴 | 方向 | 单位 |
|---|---|---|
| X | 向东 | m |
| Y | 向南 | m |
| Z | 向上 | m |
scene.size 设置地面的水平范围,地面在 XY 平面上从 (0, 0) 延伸到 (size_x, size_y):
import less
scene = less.Scene()
scene.size = 50.0 # 50 m × 50 m
scene.size = (100, 50) # 东西 100 m,南北 50 m
影像结果的第一行在北,第一列在西,与这一坐标系一致。
放置物体¶
物体位置 (x, y, z) 使用同一坐标系,z = 0 表示地面:
scene.size = 50.0
tree = less.Object("tree", mesh=less.asset_path("FREX.obj"))
scene.add(tree, positions=[[25.0, 25.0, 0.0], # 场景中心
[45.0, 45.0, 0.0]]) # 东南角附近
在有起伏的地形上,可以只给出 (x, y),物体会自动放在该位置的地面高度上。
OBJ 模型¶
OBJ 文件按“Y 轴向上”读入:文件中的点 (x, y, z) 对应场景中的 (-x, -z, y)。三角形的正面按 OBJ 的通常约定确定:从正面看,三个顶点按逆时针排列。叶片的 reflectance 作用于正面,back_reflectance 作用于背面,不设置 back_reflectance 时两面相同。
天顶角¶
天顶角从正上方开始量:
| 天顶角 | 含义 |
|---|---|
| 0° | 正上方(星下点) |
| 30° | 太阳高度角 60° |
| 60° | 太阳高度角 30° |
| 90° | 水平方向 |
方位角¶
方位角从正北开始,顺时针增加:
| 方位角 | 方向 |
|---|---|
| 0° | 北(−Y) |
| 90° | 东(+X) |
| 180° | 南(+Y) |
| 270° | 西(−X) |
太阳的方位角表示太阳所在的方向,观测方位角表示传感器所在的方向:
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=135), # 太阳在东南
atmosphere=less.NoAtmosphere())
camera = less.Orthographic(view_zenith=30, view_azimuth=270) # 从西侧斜视
由时间和地点计算太阳位置¶
from datetime import datetime, timedelta, timezone
beijing = timezone(timedelta(hours=8))
sun = less.compute_sun_position(
latitude=39.9, longitude=116.4,
date_time=datetime(2024, 6, 21, 10, 0, tzinfo=beijing),
)
print(f"天顶角 {sun.sun_zenith:.1f}°,方位角 {sun.sun_azimuth:.1f}°")
不带时区的时间按协调世界时(UTC)处理,因此本地时间请像上例一样写明时区。
单位¶
| 物理量 | 单位 |
|---|---|
| 位置、距离、高度 | m |
| 角度 | 度 |
| 波长 | nm |
| 反射率、透射率、发射率 | 无量纲,0–1 |
| 光谱辐照度 | W m⁻² nm⁻¹ |
| 光谱辐亮度 | W m⁻² sr⁻¹ nm⁻¹ |
| 物体温度 | K |
气温(Microclimate) |
°C |
| 相对湿度 | % |
| 风速 | m s⁻¹ |
| 叶面积密度 | m² m⁻³ |
| 微波频率 | Hz |