【问题标题】:point location convert between double and integer点位置在双精度和整数之间转换
【发布时间】:2015-03-03 16:17:31
【问题描述】:

我有一个三维点集。每个点 拥有自己的坐标 (x,y,z) 和 double 值。 现在我想转换点集中的所有坐标 成整数值。

例如,如果我的集合由 0.0 到 0.0 之间的随机点组成 1.0。如果我使用floor() 转换成整数,我无法区分 结果。

如何正确转换它们?我需要一些缩放吗?

【问题讨论】:

  • 尝试使用强制转换:int a = (int) 1.6d;
  • 您期望得到什么?当然,如果您截断任何数字 0.xxxx,您将得到 0。您可以在之前对数字进行预缩放,但比例因子取决于您的精度要求。
  • 我同意 Wolf 提供的SCALE 和铸造解决方案。但是如果你想提高结果的准确性,你必须在铸造/四舍五入之前加上 0.5。 pi->x = (int)(SCALE * pd->x + 0.5);。这是因为强制转换将提供较低的整数。例如:(int)100.9 将给出 100 而不是 101。

标签: c geometry data-conversion


【解决方案1】:

您关于转换为int 值的问题表明您将在像素显示中显示这些点,这里确实先用double 然后floor(或ceilround)缩放它们价值。一个简单的演员也将进行转换:

int pi.x = (int)pd.x;

或者,更简单的是,赋值本身。

int pi.x = pd.x;

最好的解决方案是为投影创建一个对话函数,因此您可以稍后决定是否需要做更多的工作来获得原始点的图像。这是一个例子:

struct Point3Dd { double x, y, z; };
struct Point3Di { int x, y, z; };

double SCALE = 100.0;

void calc_projection(Point3Dd* pd, Point3Di* pi) {
    pi->x = SCALE * pd->x;
    pi->y = SCALE * pd->y;
    pi->z = SCALE * pd->z;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2014-11-10
    • 2014-04-18
    相关资源
    最近更新 更多