1

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 軸の長さを固定するという現在の単純化されたソリューションを超える正しいアプローチが何であるかはわかりません。 (つまり、適切にスケーリングできず、他の要素の水平方向のスペースが十分にありません)。

正しい方向へのポインタは大歓迎です!

4

1 に答える 1