Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

图形width和height存在精度问题 #218

Open
Kimi-i opened this issue Jan 9, 2025 · 7 comments
Open

图形width和height存在精度问题 #218

Kimi-i opened this issue Jan 9, 2025 · 7 comments

Comments

@Kimi-i
Copy link

Kimi-i commented Jan 9, 2025

20250109-150832

在对齐像素网格设置下,图形的width和height有时候会存在精度问题,会导致基于attrs.width和attrs.height的计算不准确

@F-star
Copy link
Owner

F-star commented Jan 9, 2025

设计如此。

image

UI 层不会显示全精度,意义不大。

比如 x 坐标的真实值是 52.24621202458749,但用户是不希望看到这么长的值的,他只是想知道这个点大概在什么位置。

所以我们最好做一个四舍五入,比如保留有限的有效位显示为 52.25。

需要注意的是,修改属性值时不用做降低精度再转为源格式,我们的数据源精度越高越好。

只在显示时做降低精度。

具体可以看我的 这篇文章

如果你还是要放开精度,你可以改一下 这里,还有 这里

@F-star
Copy link
Owner

F-star commented Jan 9, 2025

另外,精度问题是可接受的,浮点数误差不可避免。在误差范围内相等就可以了。

@Kimi-i
Copy link
Author

Kimi-i commented Jan 9, 2025

image
UI层的显示没有问题,是图形的数据属性attrs.width和attrs.height的数据源,在设置对齐像素网格的情况下,感觉不应该有小数,比如这个图上,绘制了2个矩形,其中Rect1的attrs.height就有浮点数误差,但是attrs.width却没有,包括Rect2的attrs.width和attrs.height都没有浮点数误差

@Kimi-i
Copy link
Author

Kimi-i commented Jan 9, 2025

因为attrs.width和attrs.height的数据源的精度问题,遇到了在使用geo_box.ts文件里的isBoxIntersect和isBoxContain方法的时候,计算结果不正确的情况

@F-star
Copy link
Owner

F-star commented Jan 9, 2025

image UI层的显示没有问题,是图形的数据属性attrs.width和attrs.height的数据源,在设置对齐像素网格的情况下,感觉不应该有小数,比如这个图上,绘制了2个矩形,其中Rect1的attrs.height就有浮点数误差,但是attrs.width却没有,包括Rect2的attrs.width和attrs.height都没有浮点数误差

你这个要如何复现?我这边开启像素吸附,然后绘制矩形,宽高都是整数。

@Kimi-i
Copy link
Author

Kimi-i commented Jan 10, 2025

屏幕录制2025-01-10 09.45.21.zip
矩形绘制好后,对其进行二次编辑的时候会出现,我录了一个屏可以看看

@F-star
Copy link
Owner

F-star commented Jan 10, 2025

我试了下,发现 resize 会进行矩阵运算,导致图形的 x 和 y 出现了浮点数误差,宽高也跟着计算得到一个浮点数了。

这个我针对性处理一下,修正一下图形的 x 和 y。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants