سؤال

لدي قائمة بالأشياء التي أحتاج إلى تنظيمها كشركة بيانية جمالية. ينطوي نهجي الحالي على Ironpython وخوارزمية وراثية، ولكن هذا يسير لفترة طويلة جدا.

لقد كنت أقرأ على Graphviz و QuickGraph و Graph #، لكنني لا أحتاج إلى جزء التصور - لدي بالفعل تطبيق سيعرض العقد مع إعطاء الإحداثيات X / Y. قيل لي أن كلا خوارزمية Sugiyama وأسرة الخوارزميات القائمة على القوة تميل إلى إخراج الرسوم البيانية الممتعة، لكنني لا أستطيع أن أجد مكتبة .NET من شأنها إخراج الإحداثيات بدلا من الصورة دون بعض المصادر الشديدة الشديدة القرصنة.

هل يمكن لأي شخص أن يوصي المكتبات أو الخوارزميات أو مثل؟

هل كانت مفيدة؟

المحلول

هناك عدد من الخيارات، مع العديد من إيجابيات وسلبيات - قد ترغب في تجنب هذه ما هي قائمة البرامج التي تعمل، أكثر أو أقل، ما كنت تبحث عنه.

اعتاد أن يكون الأمر هو أن العثور على حل مفتوح المصدر كان صعبا، ولكن المرخصة ذات مرة تجاريا msagl. حاليا يبدو أن المصدر مفتوح.

التمييز بين ذلك رسم بياني# و quyphaph. هو أن هذا الأخير يوفر رسائل اجتياز ورائيات الرسم البياني ولكن لا يقدم أي خوارزميات تخطيط. يحتوي Graph # لديه كل المصدر المتاح، ومن ما نظرت فيه (لفترة وجيزة)، لديه فصل أنيق بين محرك التخطيط وتنفيذ الرسم.

graphviz. مكتوب في C / C + C ++ النقي وهو متجانس إلى حد ما، مع إيداعات ملف نصي يصف الرسم البياني وإنتاج أنواع مختلفة من الإخراج، كلاهما ناقلات ونباتية. إنه ليس مناسبا كبيرا بمثابة محرك تخطيط المكونات الإضافية، ولكن يمكن استخدامه من خلال القصف وتوفير ملف الإدخال المطلوب وتحليل الإخراج. ليس حل نظيف للغاية على الرغم من.

هناك أيضا شيء يسمى ogdf.. وبعد على الرغم من أنه مكتوب بالكامل في C ++، فقد تم تصميمه لاستخدامه كمكتبة بمحرك تخطيط ولديه واجهة منظم بشكل جيد لهذا. وهو يدعم خوارزميات التخطيط المختلفة بما في ذلك Sugiyama الأمثل إذا كان هذا ما تهتم به.

إذا كنت مهتما بتنفيذ اختلاف محسن على Sugiyama، فيمكنك دائما لفة خاصة بك باستخدام وصف أنيق للخوارزمية :)

في نهاية المطاف، يجب عليك تحديد نوع التصميم الذي تتواجد فيه قبل اتخاذ قرار بشأن المكتبة.

نصائح أخرى

يحتوي Microsoft Reseach على محرك تخطيط الرسم البياني الآلي الذي قد يساعدك في هذا الجهد.

قد تقرأ المزيد عن ذلك هنا:

http://research.microsoft.com/en-us/downloads/f1303e46-965f-401a-87c3-34e1331d32c5/

Yfiles. لديها تطبيقات متطورة للغاية من كلا من الفؤد الموجهة (تسمى "العضوية") ومقرها سوجياما ("يسمى التسلسل الهرمي"). أنها توفر تطبيقات أقل المشاهد ل Java و .NET و Silverlight و Flex و JavaScript. API لاسترداد الإحداثيات متاح عبر الإنترنت هنا.

يمكن اختبار الخوارزميات وجودتها في الحرة محرر الرسم البياني YED التطبيق، المكتبات متوفرة فقط تجاريا، على الرغم من ذلك.

فقط في حالة تواجه شخص ما مشكلة مماثلة. يوجد مشروع تجريبي لمشروع .NET مفتوح المصدر الذي يشتمل على العديد من خوارزميات التخطيط المنفصلة عن محرك التصور. لذلك يمكنك فقط أخذ مكتبة المنطق، وأداء الحسابات والحصول على حزمة الإحداثيات لاستخدامها في أداة Vis الخاصة بك.

https://github.com/panthernet/graphx.

هناك تطبيق تخطيط Sugiyama في Java كجزء من نظام Modsl، ترخيص Apache. المصدر هو هنا.

كنت قادرا على تحويله بسهولة بسهولة إلى مختلط الهدف-C / الهدف - تنفيذ C ++ بناء على digraph.

كنت قد حصلت على إحداثيات العقد بهذه الطريقة

namespace GleeTest
{
    class GleeTest
    {

        static void Main() {
            Microsoft.Glee.GleeGraph oGleeGraph = new Microsoft.Glee.GleeGraph();

            Microsoft.Glee.Splines.ICurve oCurve =
               Microsoft.Glee.Splines.CurveFactory.CreateEllipse(
                   1, 1,
                   new Microsoft.Glee.Splines.Point(0, 0)
                   );
            Microsoft.Glee.Node strNode1 = new Microsoft.Glee.Node("Circle", oCurve);

            Microsoft.Glee.Node strNode3 = new Microsoft.Glee.Node("Diamond", oCurve);
            Microsoft.Glee.Node strNode4 = new Microsoft.Glee.Node("Standard", oCurve);
            Microsoft.Glee.Node strNode2 = new Microsoft.Glee.Node("Home", oCurve);

            oGleeGraph.AddNode(strNode1);
            oGleeGraph.AddNode(strNode2);
            oGleeGraph.AddNode(strNode3);
            oGleeGraph.AddNode(strNode4);

            Microsoft.Glee.Edge oGleeEdge1 =
               new Microsoft.Glee.Edge(strNode1, strNode2);
            Microsoft.Glee.Edge oGleeEdge2 =
            new Microsoft.Glee.Edge(strNode2, strNode1);
            Microsoft.Glee.Edge oGleeEdge3 =
            new Microsoft.Glee.Edge(strNode2, strNode2);
            Microsoft.Glee.Edge oGleeEdge4 =
            new Microsoft.Glee.Edge(strNode1, strNode3);
            Microsoft.Glee.Edge oGleeEdge5 =
            new Microsoft.Glee.Edge(strNode1, strNode4);
            Microsoft.Glee.Edge oGleeEdge6 =
          new Microsoft.Glee.Edge(strNode4, strNode1);


            oGleeGraph.AddEdge(oGleeEdge1);
            oGleeGraph.AddEdge(oGleeEdge2);
            oGleeGraph.AddEdge(oGleeEdge3);
            oGleeGraph.AddEdge(oGleeEdge4);
            oGleeGraph.AddEdge(oGleeEdge5);
            oGleeGraph.AddEdge(oGleeEdge6);

            oGleeGraph.CalculateLayout();


            System.Console.WriteLine("Circle position  " + oGleeGraph.FindNode("Circle").Center.X + "," + oGleeGraph.FindNode("Circle").Center.Y);
            System.Console.WriteLine("Home position = " + oGleeGraph.FindNode("Home").Center.X + "," + oGleeGraph.FindNode("Home").Center.Y);
            System.Console.WriteLine("Diamond position = " + oGleeGraph.FindNode("Diamond").Center.X + "," + oGleeGraph.FindNode("Diamond").Center.Y);
            System.Console.WriteLine("Standard position = " + oGleeGraph.FindNode("Standard").Center.X + "," + oGleeGraph.FindNode("Standard").Center.Y);




        }

    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top