/// <summary> /// /// </summary> /// <param name="graphTag"></param> /// <param name="panelTag"></param> /// <param name="itemTag"></param> /// <returns></returns> private static MenuTag CreateMenuTag(int graphTag, int panelTag, GraphOption itemTag) { var m = new MenuTag { GraphTag = graphTag, PanelTag = panelTag, ItemTag = itemTag }; return(m); }
public void TestGraph() { var option = new GraphOption { xDelta = 20, yDelta = 0.5, yRatio = 0.5, SampleCount = 500 }; var graphPlotter = new GraphPlotter(option); graphPlotter.Plot(Math.Sin, new Interv(5, 102)); graphPlotter.Plot(x => Math.Cos(x) + 1, new Interv(10, 90), 3); var graph = graphPlotter.GetGraphBlock(); var blockReference = new BlockReference(Point3d.Origin, graph); var first = Interaction.GetPoint("\nSpecify extent point 1"); Interaction.InsertScalingEntity(blockReference, first, "\nSpecify extent point 2"); }
private MenuItem CreateSubMenu(string title, int gTag, int pTag, GraphOption iTag, GraphColour cTag) { var mTag = new MenuTag { GraphTag = gTag, PanelTag = pTag, ItemTag = iTag, ColourTag = cTag }; var menuItem = new MenuItem(title) { Tag = mTag, Checked = false }; menuItem.Click += MenuContextClick; return(menuItem); }
public void AddEdge(Tuple <T, T> edge, GraphOption option) { switch (option) { case GraphOption.Undirected: if (AdjacencyList.ContainsKey(edge.Item1) && AdjacencyList.ContainsKey(edge.Item2) ) { AdjacencyList[edge.Item1].Add(edge.Item2); AdjacencyList[edge.Item2].Add(edge.Item1); } return; case GraphOption.Diirected: if (AdjacencyList.ContainsKey(edge.Item1) && AdjacencyList.ContainsKey(edge.Item2) ) { AdjacencyList[edge.Item1].Add(edge.Item2); } return; case GraphOption.Transpose: if (AdjacencyList.ContainsKey(edge.Item1) && AdjacencyList.ContainsKey(edge.Item2) ) { // 方向倒過來 AdjacencyList[edge.Item2].Add(edge.Item1); } return; return; default: throw new Exception("option not valid"); } }
public Graph(IList <T> vertices, IList <Tuple <T, T> > edges, GraphOption option) { _vertices = vertices; _edges = edges; // 點和線要完全分開也是很聰明的做法 foreach (T vertex in vertices) { AddVertex(vertex); } foreach (var edge in edges) { AddEdge(edge, option); } //但是還是能在無知的情況下去搜尋才是正道 跟Dijkstra Shortest Path 有點像 //不知道所有點的情況下 去構建出來 等於是創造一個通用演算法 //也不是這樣說 //實際上就算是手繪解 給你一個圖出來 也是要已知所有的點線 所以其實應該已經知道 //原本想的可能例如現實世界的地圖 或者那種超大地圖 就會想像是從一個點往外延伸 //但是其實 還是先已知圖 演算法才去分析 //所以實際程式是分兩個動作 1 建構圖成資結 2 跑演算法 //直接解紙本考題 會以為只有跑演算法的部分 就會以為全部都是邊探索邊得出的 //而忽略了 1 的事實 }
/// <summary> /// /// </summary> /// <param name="title"></param> /// <param name="gTag"></param> /// <param name="pTag"></param> /// <param name="iTag"></param> /// <returns></returns> private MenuItem CreateSubMenu(string title, int gTag, int pTag, GraphOption iTag) { // ReSharper disable once IntroduceOptionalParameters.Local return(CreateSubMenu(title, gTag, pTag, iTag, GraphColour.Black)); }