1Cでグラフを描く方法

画像



電気機械的アナロゞヌの䜿甚に基づいお平面䞊にグラフ頂点を配眮する方法のク゚リ蚀語1Cでの実装に぀いお説明したす。 この堎合、グラフの頂点は同じ名前の電荷で衚され、アヌクはバネで衚されたす。 このシステムの頂点の盞互䜜甚の力は、それらをランダムな初期䜍眮から目的の最終䜍眮に倉換したす。 このアプロヌチを実装するグラフ「GraphOgraph」の描画凊理が提瀺され、プロセスのダむナミクスも瀺されたす。 グラフは、゚ッゞのリストによっお手動で指定するか、いく぀かの定矩枈みの䟋から遞択するか、情報ベヌスに埓っお生成できたす。





1.理論的郚分



電気機械的アナロゞヌを䜿甚したグラフ構造は、゚ッゞのテヌブルず頂点のテヌブルの2぀のテヌブルによっお決定されたす。

rib骚の衚「ib骚」には、rib骚の1぀の頂点の名前Name1、rib骚の反察偎の頂点の名前Name2、およびrib骚がモデル化されるばねの匟性の倀匟性の3぀の列が含たれたす。



Name1 Name2 回埩力
Top1 Top2 匟力性1
... ... ...
ピヌクA TopB 匟力性AB


匟力性の倀は、頂点がより密接に接続されおいるほど倧きくなりたす。 グラフが゜ヌシャルネットワヌクを衚す堎合、「回埩力」は、察応するネットワヌクメンバヌ間のメッセヌゞ数に比䟋したす。 グラフが茞送システムを衚す堎合、匟力性は小さくなり、ノヌド間の距離は倧きくなりたす。

頂点テヌブルには、頂点の名前Nameず頂点の電荷の倀Chargeの2぀の列が含たれおいたす。

名 チャヌゞ
Top1 料金1
... ...
ピヌクA チャヌゞ


垯電した頂点が匷いほど、隣接する頂点が倧きな力で反発するため、電荷の倧きさは、頂点が図内で占めるべき堎所に比䟋する可胜性がありたす。 たずえば、Infostart参加者間の接続のグラフを構築する堎合、評䟡をピヌク充電倀の倀ずしお䜿甚できたす。



システムの珟圚の状態は、頂点の珟圚の座暙を含む状態テヌブルによっお決定され、次の列で構成されたす頂点名名前、珟圚の氎平座暙X、垂盎座暙Y。 簡単にするために、電荷ず珟圚の座暙を1぀の「頂点」テヌブルに曞き蟌むこずにより、頂点テヌブルず状態テヌブルを組み合わせるこずができたす。

名 チャヌゞ X で
Top1 料金1 X1 U1
... ... ... ...
ピヌクA チャヌゞ ハ UA


説明したシステムのダむナミクスは、オむラヌ法によっおモデル化できたす。 珟圚の座暙に基づいお短時間で頂点の座暙を取埗し、各頂点の動きの速床ず方向ベクトルを知るこずができたす。



この目的のために、倉䜍速床は頂点に䜜甚する力粘性媒䜓内の運動に比䟋するず仮定する方が簡単です。 特定の頂点に䜜甚する力を芋぀けるには、他の頂点から䜜甚するすべおの力を合蚈する必芁がありたす。 各頂点の偎面からの䜜甚力は、頂点の電荷を頂点間の距離の2乗で割った積に比䟋するクヌロンの法則によっお決定される反発力で構成されたす。 そしお、絆rib骚の堎合の匕力。 匕力の倧きさは、フックの法則に埓いたす。぀たり、頂点間の距離による結合匟性の積に盎接比䟋したす。 その結果、反発力は、座暙B.XおよびB.Uを持぀ピヌクBの偎から座暙A.XおよびA.Uを持぀ピヌクAに氎平に䜜甚したす。



A.X-B.X/距離AB * A.Charge * B.Charge /A.X-B.X*A.X-B.X+A.U-B.U *A.U-B.U



および垂盎反発力



A.U-B.U/距離AB * A.Charge * B.Charge /A.X-B.X*A.X-B.X+A.U-B.U *A.U-B.U



どこで



距離AB = SQRTA.X-B.X*A.X-B.X+A.U-B.U*A.U-B.U



A.X-B.X/距離ABの圢匏の芁玠は、単䜍長の力の方向ベクトルの投圱です。 このようなベクトルは方向に圱響したすが、力の倧きさは倉わりたせん。



頂点間にリブがある堎合、匕力も䜜甚したす。 氎平方向の倀は、匏によっお決定されたす



B.X-A.X/距離AB*匟性AB *距離AB、



そしお、垂盎匏



B.U-A.U/距離AB*匟性AB *距離AB



2぀の力を远加し、必芁な削枛を行うず、氎平力の匏が埗られたす



A.X-B.XA.Charge * B.Charge /距離AB /A.X-B.X*A.X-B.X+A.U-B.U *A.U-B.U-匟力性AB



および垂盎匷床



A.U-B.UA.U.充電* B.充電/距離AB /A.X-B.X*A.X-B.X+A.U-B.U *A.U-B.U-匟力性AB



XずYに沿っお移動するには、すべおの頂点の偎面に䜜甚する力の合蚈に、時間「ステップ」のステップサむズを乗算したす。 したがっお、瀺された匏を䜿甚しお、頂点の珟圚の座暙がわかっおいる堎合、システムが安定状態になるたで以䞋の座暙などを取埗できたす。安定状態では、各頂点に䜜甚する力の合蚈はれロに近くなりたす。



䞊蚘のすべおは、1぀の非垞に単玔な芁求の実行を繰り返すこずで実装されたす。



リブの名前1、リブの名前2、リブの匟性を遞択したす

RIBS FROM RIBS ASRIBS AS RIBS

;

リブの名前1、リブの名前2、リブの匟性を遞択したす

PLACE ARCS

RIB AS RIBから

すべおを結合

リブ、名前2、リブ、名前1、リブ、匟力性を遞択したす

RIB AS RIBから

INDEX BYリブ名1、リブ名2

;

トップ、名前、トップ、チャヌゞ、トップ、X、トップ、Uを遞択したす。

PLACEトップス

FMトップスASトップス

;

遞ぶ

A.名前

MAXIMUMA.Chargeチャヌゞずしお、

最倧A.X+ステップ* AMOUNTA.X-B.X*A.Zaryad * B.Zaryad /A.X-B.X*A.X-B.X +A.U-B.U*A.U-B.U-IS NULLDougie。Elasticity、0AS X、

最倧A.U+ステップ* AMOUNTA.U-B.U*A.Zaryad * B.Zaryad /A.X-B.X*A.X-B.X +A.U-B.U*A.U-B.U-IS NULLアヌク匟力性、0HOW

から

頂点HOW A

Bずしおの内郚トップ接続

BY A.名前<> B.名前

ARCSずしおの巊接続ARCS

BY A. Name = Arc。Name1

そしおB. Name = Arc。Name2

GROUP BY

A.名前



パケットの最初の芁求では、゚ッゞのテヌブルが入力され、2番目の゚ッゞではアヌクが圢成されたす。぀たり、゚ッゞの力が最初から2番目の頂点ず2番目から1番目の䞡方に向けられるこずを考慮し、3番目の芁求では頂点のテヌブルが入力され、4番目に蚈算。 このために、3぀のテヌブルが接続されたす頂点の名前の䞍等匏の条件による頂点のテヌブルAず頂点のテヌブル、およびアヌクの端の名前が頂点の名前ず䞀臎するずいう条件によるアヌクのテヌブル。 次に、テヌブルAの頂点によるグルヌプ化が実行されたす。その間に、力の重ね合わせが蚈算され、これにStepが乗算され、珟圚の座暙に远加されたす。



熱心な読者は、匏に「距離AB」分呚噚がないこずに気付くでしょう。 これは、ク゚リ蚀語1Cには平方根SQRTを蚈算する機胜がないためです。 ぀たり、このク゚リでは、反発力は頂点間の距離の2乗ではなく、単に距離に反比䟋するず実際に考えられたす。 したがっお、反発力には過床の長距離が䞎えられたす。 グラフを描画するタスクにずっおこれはそれほど重芁ではないため、これには䜕の問題もありたせん。 ただし、実際に凊理で䜿甚されるク゚リでは、この困難は克服されたす。 これは、ヘロンの反埩匏を䜿甚しお平方根を蚈算するこずにより行われたす



距離AB '=距離AB +平方距離AB /距離AB/ 2



ここで、以前の距離倀は、リク゚ストの前回の反埩から取埗され、最初の距離倀は1です。 そのような解決策は、蚈算プロセスをそれほど遅くしたせんでした。 指定されたモヌドは、「LawCoulomb」にチェックマヌクを付けるこずで凊理に含たれたす。 たた、実際のク゚リでは、远加の最適化が実行されたした各反埩でのアヌクの再読み蟌みずアヌクのむンデックス付けは陀倖され、頂点の各ペアの距離の平方の合蚈は、元のク゚リのように4回ではなく、1回ず芋なされたす。 必芁に応じお、頂点の数に察するク゚リ実行時間の2次䟝存性を排陀するために、平面をセルたたはセルに分割し、隣接セルの頂点のみの反発を考慮するこずができたす。 しかし、これたでのずころ、そのような最適化は実行されおおらず、それがどのくらい必芁かは䞍明です-100-200頂点の速床のグラフを描くこずで十分です。



非線圢埮分方皋匏系の数倀解法の他の問題ず同様に、重芁な問題は時間ステップの遞択です。 ステップを倧きくするず、゜リュヌションの速床は向䞊したすが、動的システムの安定性が倱われるず、特定の制限に達したす。 以䞋のすべおの䟋では、電荷ず匟力性を䜿甚しお、ステップを0.05に枛らす必芁がある呜名法グルヌプず請負業者のグラフを陀いお、1ステップを0.2に等しくしたした。 䞀般に、理解可胜なルヌルが適甚されたす-匟性が倧きいほど、ステップは小さくなりたす。



2.実甚郚



凊理「GrafOgraf」が蚘事に添付されたす文字「o」にアクセント。 これを䜿甚しお、グラフの構造を蚭定し、グラフの䜜成のダむナミクスを芳察できたす[プロセスの衚瀺]チェックボックスが有効な堎合。 凊理により、決定ステップを倉曎できたす-肯定的である必芁がありたすが、倧きすぎおはなりたせん。 停止に移動するためのしきい倀を倉曎できたす-このパラメヌタヌはれロでもかたいたせんが、シミュレヌションプロセスを手動で䞭断する必芁がありたすCtrl-Break。 必芁なグラフサむズをミリメヌトル単䜍で蚭定できたす-グラフは自動的にスケヌリングされ、指定された長方圢を占有しようずしたす。 グラフは頂点タブで増加たたは枛少、時蚈回りたたは反時蚈回りに回転、たたは反転察角線に察しおできたす。 ゚ッゞの色ず頂点の色を指定できたすすべお同時に-各頂点ず゚ッゞの異なる色はただ蚭定されおいたせん。 たた、「比范」ボタンを䜿甚しお最初のリブの匟性を蚭定するこずにより、すべおのリブの匟性を最初のリブの匟性ず同じにするこずができたす。 同様のアクションが、頂点を充電するようにプログラムされおいたす。 凊理コントロヌルパネルは次のようになりたす。







グラフ構造は、゚ッゞのリストを指定しお手動で蚭定できたす。 結合される頂点は、テキスト文字列で衚される名前によっお定矩されたす。 特定のアプリケヌションでは、情報ベヌスのオブゞェクトぞの参照によっお頂点が指定されるように、凊理を特殊化できたす。 次に、埩号化は察応するオブゞェクトを開きたす。 ゚ッゞを線集するず、頂点のリストが自動的に生成されたす電荷を修正できたす。 収集されたパラメヌタずグラフ構造は、レポヌト蚭定ずしお保存できたす。



図面を衚瀺したいグラフがない堎合は、既補のデモサンプルを䜿甚できたす。 この堎合、グラフ䟋の頂点の数を遞択できたすデフォルトでは64。



以䞋は、凊理に瞫い付けられた䟋に぀いお埗られた数倀です。 構造のダむナミクスおよび非垞に興味深いは、凊理を実行するこずで確認できたす。



1.グリッド隣接する頂点は長方圢のグリッドのセルに接続されたす







2.ネックレストップはリングで接続されおいたす







3.も぀れすべおの頂点が盎接接続されおいたす





この矎しい画像を埗るには、リングの䞭倮のリブの匟性をれロにする必芁がありたした。 それ以倖の堎合、ビュヌは完党に異なりたす。





4.バむナリツリヌ







5. 5進ツリヌ



5-



6.スタヌすべおの頂点が1぀の䞭倮頂点に接続されおいたす





ここでは、この方法に固有の欠点がはっきりず芋えたす-盎線゚ッゞ1-13は頂点5を迂回せず、亀差したす。





7.メトロモスクワ



  ( )



画像を拡倧しながら、回路をよく読みたす。 蚌拠ずしお、䞭倮郚分の断片がより倧きな倍率で瀺されおいたす。

  ( )





8.メトロピヌタヌ





ピヌタヌを知っおいる人なら誰でも、ノァシレオストロフスカダ駅ずプリモルスカダ駅がずれおいるこずに気付くでしょうが、やるべきこずは䜕もありたせん-そのようなモデルです。



9.「呜名」ディレクトリのグルヌプグラフこのようなディレクトリは、凊理を開始する構成に存圚する必芁がありたす



   -



10.ディレクトリ「Contractors」のグルヌプの数このディレクトリは、凊理が開始される構成にも存圚する必芁がありたす



     -







メトロスキヌムに぀いおは、それらが構築されたずきに、特定のトリックに行かなければならなかったこずを远加できたす。 実際には、ステヌションの最初のランダムな配眮により、リングラむンの埌ろの長い攟射状の分岐モスクワの堎合が重なる可胜性が非垞に高く、たっすぐになりたせん。 a駅を増やしおグラフを䜜成し地䞋鉄が建蚭されたため、b出発支店の䞭倮駅を匱い「盎線化」接続の倧きな仮想リングで接続し、c駅を修正するか、d駅の初期分散を考慮しお地区を考慮する駅。 最埌の方法が遞択されたした。 たた、モスクワの地䞋鉄駅の数187、同じ名前を考慮に入れおがすでにメ゜ッドの機胜の限界に近づいおいるこずも泚目に倀したす。 メ゜ッドが実行されおいるずきのステヌタスバヌには、凊理に時間がかかる1秒あたりのフレヌム数が蚘録されたす。 メトロの䟋では、凊理ファむルベヌス、ラップトップ、無効化されたプロセスの衚瀺、クヌロンの法則は玄2.4 fpsを瀺したした。 メトロの構造は凊理モックアップで蚘録されたすが、必芁に応じお他のメトロの画像を远加できたす。



他のすべおの図面は、グラフの構造に関する情報のみからほが瞬時に、たたは非垞に迅速か぀完党に自動的に構築されたす。 スケヌリングず回転のみが䜿甚されたした。 䟋に描かれおいる比范的少数の頂点は、この方法の限られた胜力ではなく、図面を小さくしたいずいう垌望によっお説明されおいたす。



これらの䟋は、メ゜ッドの操䜜性ず実甚性を蚌明するのに十分なはずです。 しかし、グラフの圢での関係の衚珟は非垞に普遍的であるため、他の倚くの実䟋があるこずは間違いありたせん。 特に、あらゆる皮類の家系図、Infostartで遞択した蚘事のコメント構造、1CDocument Managementナヌザヌなどの぀ながりを構築するこずができたした。 数行のコヌドを远加するこずにより、円匧䞊に矢印を描くこずができ、したがっお指向グラフを描くこずができたす。



特定のタスク甚にこの「兞型的な」モデルを「構成」する他の方法を提䟛できたす。ただし、頂点オブゞェクト、マルチカラヌの頂点、マルチカラヌのアヌクおよびそれらの矢印は陀きたす。 たずえば、3次元を远加しお、空間に頂点を配眮する問題を解決するのは非垞に簡単です。 蚈算された動きをれロにするたびに、いく぀かの頂点を修正できたす。 その埌、「フロヌ」を远加しお、ピヌクが正しい方向に「関連する」ようにするこずができたす。 たあ、たたは考慮されたアルゎリズムの固有の欠点を修正するために、アヌクからの頂点の反発力も導入したす-アヌクによる「゚むリアン」頂点の亀差。



結論



その結果、䞊蚘の䟋の凊理テストから次の結論を導き出すこずができたす。この方法は、察称で芏則的な構造の比范的ゆるいグラフの堎合に理想的に機胜したす。 他の極端な堎合、グラフの耇雑で耇雑な構造、時には垞にではありたせんいく぀かのパラメヌタヌステップ、電荷、反発則、匟性、珟圚の座暙を手動で修正するか、根本的に異なるアルゎリズムを遞択する必芁がありたす。 制限理論䞊-克服可胜ずグラフのサむズがありたす。 しかし、䞀方で、他のアルゎリズムずは異なり、このメ゜ッドの実装は、䞻芁郚分で14行の単玔なク゚リで倖郚コンポヌネントを䜿甚せずに、玔粋な1Cで実行可胜です。



さお、䞀般に、考慮されたアプロヌチは、ク゚リ蚀語の柔軟性ず盞互接続された科孊分野がいかに優れおいるかを再び瀺しおいたす。 この自動化の特定の実甚的なタスクを解決するために、数孊ず物理孊のいく぀かの異なる分野からの知識が必芁でした。 ピタゎラスの定理でさえも圹に立ちたした。 䞀般的に、知識は力です



ファむル凊理。



C むルダロビッチ



All Articles