1

免责声明:这是为了爱好发展 - 除非被要求这样做,否则我不会在专业工作中过度设计这么多。

想象一个 N 维曲面,例如线 (1D)、网格/圆 (2D)、立方体/球 (3D) 等,其中该曲面的每个轴都是有限的,因为它具有起点和终点,或者环绕。一个很好的例子是地球,那里有经度(环绕)、纬度(起点和终点),必要时还有高度和时间(假设这些起点/终点有一个特定的起点)。

处理这种情况的通用结构可能是这样的:

typedef NoAxis End;
typedef Axis<End>::NoWrap<0, 365> Time; // one year, if units are in days
typedef Axis<Time>::NoWrap<0, 35000> Height; // sea level to 35k meters
typedef Axis<Height>::NoWrap<-90, 90> Latitude;
typedef Axis<Latitude>::Wrap<-180, 180> Longitude;

“Axis”类采用模板参数,即下一个轴;这形成了一个轴链,其中一个特殊类型“NoAxis”开始链。几何运算,例如查找两点之间的距离,是通过累积每个轴的计算来执行的。

我的问题:有没有办法,最好是通过模板元编程,以编程方式找到可以乘以每个轴的极值的最大数量级 - 想法是最大化表面分辨率 - 但不会溢出所用类型的存储包含值(例如,不要在 32 位系统上溢出 32 位等)。这个数量级必须考虑计算表面上点之间的距离,这涉及到求平方距离。

再一次,找到这个数量级的原因是为了获得给定存储类型可能的最高分辨率。

4

0 回答 0