点Aから点Bまで直線を描画したいと思います。ただし、点Bが点Aの下にexactly
であれば直線が描画されるはずです。しかし、点BがAよりも小さく、Aから水平方向に少し離れていれば、線は直角に描かれるはずです。私はあなたが私を得ることを願っています。 edraw MaxなどのUMLツールを使用したことがある場合は、これらのタイプの行を見たことがあります。どのようなアイデアをどのように達成することができますか?事前:) +はあなたのためにそれを処理すると、それはその始点と終点に応じて線を描画しますGDIのような複雑な線の背後にある論理
答えて
がここにいくつかのコードです:
void connectPoints(Point a, Point b)
{
Point middlePoint1(a.x, (a.y + b.y)/2);
Point middlePoint2(b.x, (a.y + b.y)/2);
drawLine(a, middlePoint1);
drawLine(middlePoint1, middlePoint2);
drawLine(middlePoint2, b);
}
明確にするために、アスカーは実際にここにほとんどの接続のように見える3セグメント軸整列ラインを望んでいる:
簡単なアプローチの問題点は何ですか?
// pA, pB - points
DrawLine(pA.X, pA.Y, pA.X, pB.Y); // vertical line from A point down/up to B
DrawLine(pA.X, pB.Y, pB.X, pB.Y); // horizontal line to B
+1基本的な考え方は正しいです。より複雑なトピックは、複数の線が描画された図をOPがどのように処理するかです。これらの直交線については、彼が描くことができる行は2つあり、例えば、下と右、右と下である。今では彼に1000個の描画があり、2^1000の可能な構成が可能です。行の重なりを最小限に抑えるために、どちらを描画しますか?コーナーポイントの衝突で線を避けるために、どちらを描画しますか?難しい問題はこのレイアウトの問題です。 –
@Ira、それは覆われていない質問に答えるのは難しいです。私はこの問題は一般的には複雑であることに同意しますが、この特定の質問はそれほど詳細ではないので、ここでは最も簡単な方法で十分だろうと思いました。私たちは彼が本当に必要なものを知らないので、他の解決策が強調されるかもしれません。 – Snowbear
はあなたが何を意味するか、このです直角の知性によって?擬似は
Point pA(x,y);
Point pB(x,y);
if abs(pB.X-pA.X) < abs(pB.Y-pA.Y) // Going vertically or horizontal?
{
DrawLine(pA.X, pA.Y, pA.X, pB.Y); //Long vertical
DrawLine(pA.X, pB.Y, pB.X, pB.Y); //Short horizontal
}
else
{
DrawLine(pA.X, pA.Y, pB.X, pA.Y); //Long horizontal
DrawLine(pB.X, pA.Y, pB.X, pB.Y); //Short vertical
}
か(私の頭の上から)曲がったラインのために...結果として起きる:
Point pA=(x,y);
Point pB=(x,y)
if abs(pB.X-pA.X) < abs(pB.Y-pA.Y) // Going vertically or horizontal?
{
Point pHalfwayY = (pB.Y-pA.Y)/2 + pB.Y
DrawLine(pA.X, pA.Y, pA.X, pHalfwayY); //Long vertical 1st half
DrawLine(pA.X, pHalfwayY , pB.X, pHalfwayY); //Short horizontal
DrawLine(pA.X, pHalfwayY , pA.X, pB.Y); //Long vertical 2nd half
}
else
{
Point pHalfwayX = (pB.X-pA.X)/2 + pB.Y
DrawLine(pA.X, pA.Y,pHalfwayX , pA.Y); //Long horizontal 1st Half
DrawLine(pHalfwayX , pA.Y, pHalfwayX , pB.Y); // Short Vertical
DrawLine(pHalfwayX , pA.Y, pA.X, pB.Y); //Long horizontal 2nd half
}
・ホープ、このことができます。
- 1. 複雑な論理演算
- 2. フルテキストノイズワード - 論理の背後に
- 3. テンプレートメソッドの背後にある論理を理解したい
- 4. このプログラムの背後にある論理は何ですか?
- 5. ソースコントロールの背後にある理論(および用語)
- 6. 量子鍵:これの背後にある論理?
- 7. 時間複雑度/グラフ理論
- 8. 高凝集性ではあるが複雑な論理を持つテストクラス
- 9. Android複雑な背景や罫線を行う方法
- 10. scikit-learnのextract_patches関数の背後にある理論/アルゴリズムは何ですか?
- 11. Kernighanのビットカウントアルゴリズムの背後にある論理を説明してください
- 12. arr1 [i ++] = arr2 [j ++]の背後にある論理は何ですか?
- 13. Ruby Rails 2.3.xページネーションの背後にある理論は何ですか?
- 14. 複雑なSQL where節:因数論理にするかどうか
- 15. ScriptManager.GetCurrentメソッドの背後にある理由
- 16. KMPパターンマッチングアルゴリズムの背景にある理論は何ですか?
- 17. ボタンのインスタンスの作成と、プレーンなクラスのインスタンスの作成の背後にある論理?
- 18. バイナリツリー形式でpyparsingで複雑な論理式を構文解析する
- 19. ターミナル(bash?)/ Docker:論理の背後および -
- 20. 乱数生成の背後にある基本的な論理は何ですか?
- 21. Flink複雑なイベント処理
- 22. 複雑なイベント処理 - Esper
- 23. 複雑な論理式を解析し、PHPで検索を行います
- 24. SciKit Learn - 線形回帰の背後にある数学モデル?
- 25. ホストの背後にあるnginxの背後にあるタワー
- 26. 複雑なイベント処理 - ストリーム処理
- 27. c#複雑なルールを処理する
- 28. 複雑なイベントを処理する
- 29. Oracleの複雑なXML処理
- 30. 角度2の複雑な論理を決定する[style.background]が動作しない
あなたは正しいです。これは、まさに望ましい動作です。あなたのコードが何をしているか教えてください。 – TCM