指定されたパスの上/上/下に文字列を描画するプログラムを作成します。問題は、実際に描画している文字と以前のすべての文字との交差を確認する必要があることです。私はそれを行い、それはうまくいきます。唯一のことはパフォーマンスについてです。
private void RemoveOverlapping(Graphics gr, float angle, float x, float y, GraphicsPath graphicsPath)
{
Matrix matrix = new Matrix();
for (;;)
{
matrix.Reset();
matrix.RotateAt(angle, new PointF(x, y));
graphicsPath.Transform(matrix);
bool isOverlapping = false;
Region letterRegion = new Region(graphicsPath);
foreach (Region region in _previousRegions)
{
region.Intersect(letterRegion);
if (!region.IsEmpty(gr))
{
matrix.Reset();
matrix.RotateAt(360f - angle, new PointF(x, y));
graphicsPath.Transform(matrix);
matrix.Reset();
matrix.Translate(1, 0);
graphicsPath.Transform(matrix);
isOverlapping = true;
break;
}
}
letterRegion.Dispose();
if (!isOverlapping)
return;
}
}
テストを行ったところ、ほとんどの計算時間がかかるAlt+F2
と言われました... 2 つの交差をチェックする (追加のアルゴリズムを実装せずに) 別の方法はありますか?region.IsEmpty()
Regions/GraphicsPaths
それはどのように見えるかです: