0

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();                        
                }
            }
        }            
    }

ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

4

1 に答える 1

3

オブジェクト/ベクトル/モノを相互に関連付けて維持するほとんどの2Dおよび3Dアプリケーションは、シーングラフを使用します。グラフは、すべてのオブジェクト(ルートを除く)が親を持つツリー構造です。各子ノードには、その親に対して定義された位置があります。これにより、1人の子を移動すると、すべての子が自動的に移動するようになります。オプションで、必要に応じて、相対的なスケーリングまたは回転を保存することもできます。

于 2013-03-20T20:01:47.297 に答える