我正在使用 Direct2d (DirectX11) 在 C++ 中开发图形应用程序。该应用程序接收传感器数据并使用在 x 轴(表示时间)上并排放置的矩形显示输入。每个矩形都填充有线性渐变画笔,表示沿 y 轴显示的离散时间间隔内的多个传感器读数。获取读数后,下一个矩形的起始“x”位置应该正好是最后一个矩形完成的位置,即 rect1.right 应该是 rect2.left。使用下面的伪代码计算每个矩形的起点:
//find the number of rectangles needed to represent the time scale (rects must be an integer, as we cannot display partial rectangles
int nNumXRects = fAxisLength/fTimeDivision;
//calculate the X-axis increment for each rectangle
float fXIncrement = fXAxisLineLength/(float)NumXRects;
//Get the next x position
rect2.left = rect1.right;
rect2.right = rect2.left + fXIncrement;
我的问题是,只有当 fXIncrement 的值恰好是整数(例如 3.0f)时,图表才会正确显示。这显然将 X 轴的长度限制为矩形数量的倍数乘以每个矩形的长度。这会影响应用程序的所有其他元素可用的区域。如果增量值不是整数,则矩形之间会出现小黑线,这会破坏外观并使数据更难解释。我知道原则上为什么会发生这种情况-例如,我们不能显示像素的一小部分,但是应该如何正确地完成此操作,以使矩形始终完全匹配,不管轴的长度如何?似乎 Direct2D 非常适合这一点,并且应该从本质上处理将小数值精确地映射到物理像素,但我不知道当前简单的解决方案超出了正确的方法是什么,即保持 x 轴的长度固定(这意味着我无法正确缩放,并且其他元素在水平方向上没有足够的空间)。
任何指向正确方向的指针将不胜感激!