【发布时间】:2011-03-10 00:10:16
【问题描述】:
(来源:roughnotebook at sites.google.com)
我需要使用 System::Drawing::Drawing2D(即 GDI+)从上面显示的 XY 坐标系切换到 X'Y' 坐标系。这就是我的想法:
float rotation = // +90 below is because AB is the new vertical...
Math::Atan2(pB.Y - pA.Y, pB.X - pA.X) * 180.0 / Math::PI + 90.0f;
Matrix m;
m.Translate(pA.X, pA.Y);
m.Rotate(rotation);
m.Invert();
array<PointF> points = gcnew array<PointF>{ pC };
m.TransformPoints(points);
有没有办法在最小化舍入误差的同时做到这一点?我可以避免在这里调用Atan2(或其他反三角函数)吗?
【问题讨论】:
-
@Rowland,你现在看到图片了吗?
-
我现在可以 -- 你看到了多大程度的舍入误差?
-
没什么了不起的。我还没有查看实际值。但是当我放大某些角落时,相邻的矩形显示它们之间的小重叠或间隙。恕我直言,这可以通过更改或避免旋转计算来最小化。
-
这可能是您渲染方式的人工产物?我在地理信息系统中看到过类似的情况,其中两个多边形共享一条边,但由于在渲染对角线时用于舍入的算法,会出现小间隙。
标签: math geometry c++-cli gdi+ gdi