控制点转换

Control points transformation

提问人:Zoltán Orosz 提问时间:6/5/2023 最后编辑:Zoltán Orosz 更新时间:6/5/2023 访问量:24

问:

我想显示控制点(THREE.具有 0 z 坐标的 Vector3)在画布上。这些控制点的值小于 1,画布的高度为 200 像素,宽度为 400 像素。因此,我在画布上显示之前对这些点进行变换(将每个点乘以 100),在更改其位置后,我将其除以 100 来反转变换。我反转了转换,因为原始位置来自引擎,我必须将其写回来。

有人可以解释为什么这种转变不起作用吗?

const transformControlPointsForDisplay = (controlPoints: THREE.Vector3[]) => controlPoints.map(cp => new THREE.Vector3(
    cp.x * 100.0,
    cp.y * 100.0,
    cp.z * 100.0
));
const reverseTransformControlPoints = (controlPoints: THREE.Vector3[]) => controlPoints.map(cp => new THREE.Vector3(
    Number((cp.x * 1.0 / 100).toFixed(10)),
    Number((cp.y * 1.0 / 100).toFixed(10)),
    Number((cp.z * 1.0 / 100).toFixed(10)),
));
JavaScript Typescript 三.js

评论

1赞 Tim Roberts 6/5/2023
它有什么作用?我确实看到你是乘以 10,而不是乘以 100。
0赞 Zoltán Orosz 6/5/2023
@TimRoberts 是的,你是对的,这只是一个错别字,我改正了。我有来自引擎的控制点。我想在画布上显示这些点,但控制点的值小于 1,画布的大小为 400x200,因此我将这些点转换为在画布上可见的更大值。在画布上显示它后,实现了一个逻辑,用于处理点可以移动。更改位置后,我必须将这些内容写回引擎中,因此我想反转转换,但以这种方式,它始终将值设置为 0。
1赞 Tim Roberts 6/5/2023
你为什么要这样做?这将转换为字符串,这似乎不是您想要的。toFixed
0赞 Eric Postpischil 6/5/2023
编辑问题以提供最小的可重现示例。并考虑不要用转换后的数字覆盖存储的值;仅将转换后的数字用于显示。

答: 暂无答案