2D、描画、アルゴリズムなどのキーワードを検索しましたが、これが SOF で重複している可能性があるかどうかはわかりませんでした。お知らせください。StackOverFlow ポリシーに従うために削除させていただきます。
簡単に言えば、キャンバス上で 2D で四角形を移動するための最適化されたアルゴリズムを誰かが使用したことがあるか、または知っているかどうかを知る必要があります。(現在はWPFを使用しています)
これが私たちのコードであり、マウスを使用して移動される長方形でノード/ポイントに接続されている移動オブジェクトに問題があります。ユーザーがノードをつかんで、たとえば右下隅をキャンバスにドラッグするシナリオを考えてみましょう。
長方形は問題なく動きますが、別の長方形、線、円などの他の形状が接続されている場合。現在、うまくいかず、デザイン/スケッチが形を崩しています。
私の質問を明確にするために、おそらくこれを尋ねる必要があると思います:どのアルゴリズムまたはどの種類のデータ構造が、この長方形への他のリンクされた形状の接続を追跡および維持するのに役立ちますか?
ノート: OK、ここで追加する必要があるのは、すべてのケースでコードが正常に機能していたことですが、形状や描画が複雑になると、デザイン全体またはオブジェクトを移動するのに時間がかかりすぎることに気付きました. 以前のバージョンで (長方形に関して) 行ったことは、リストにすべての接続情報を格納する 2 つの線を接続することでした。そのため、長方形の場合、線の始点と終点のそれぞれに情報を格納していました。ただし、新しいバージョン (開発中) では、これらの情報を格納するために Point クラスのオブジェクトを使用しました。したがって、8 つのポイントに情報を保存する代わりに、システムを最適化することを期待して、接続情報を 4 つのポイントに保存しています。ここで、長方形の移動が適切に行われず、長方形が壊れた長方形または単一の線に変わる可能性があるこの接続の問題に遭遇しました。
public void RefreshDirectConnections()
{
if (!this.IsTraversed)
{
this.IsTraversed = true;
TestDrawingCanvas canvas = this.Parent as TestDrawingCanvas;
foreach (TestConnection con in this.Connections)
{
TestShapeBase shape = canvas.GetByID(con.ConnectedShapeID);
if (!shape.IsValidMove(this.GetHandle(con.ThisHandle), con.ConnectedHandle))
{
InValid = true;
canvas.DrawInvalidRect(this.GetHandle(con.ThisHandle));
}
else
{
shape.MoveHandleTo(this.GetHandle(con.ThisHandle), con.ConnectedHandle);
shape.RefreshDrawing();
}
}
}
}