public EuclideanDistanceTo ( |
||
other | ||
Résultat | double |
//ノード情報から樹状突起の実際の長さと電気長などを計算 private void SetDistanceRec(DendriteNode node, DendriteNode parent) { XMax = Math.Max(XMax, node.gx); XMin = Math.Min(XMin, node.gx); YMax = Math.Max(YMax, node.gy); YMin = Math.Min(YMin, node.gy); ZMax = Math.Max(ZMax, node.gz); ZMin = Math.Min(ZMin, node.gz); //親ノードと子ノード間のユークリッド距離 double d = node.EuclideanDistanceTo(parent); node.RealDistance = parent.RealDistance + d; //二点のノードの平均半径 double aveRadius = (node.Radius + parent.Radius) / 2; //電気的距離 R = ρ*L/(pi*r_ave^2) 定数部分は除去して R = L/r_ave^2 node.ElectricalDistance = parent.ElectricalDistance + d / (aveRadius); MaxRealDistance = Math.Max(node.RealDistance, MaxRealDistance); MaxElectricalDistance = Math.Max(node.ElectricalDistance, MaxElectricalDistance); TotalLength += d; TotalElectricalLength += d / aveRadius; foreach (var next in node.ConnectedNodes) { if (next != parent) { SetDistanceRec(next, node); } } }
//ノード情報から樹状突起の実際の長さと電気長などを計算 private void SetDistanceRec(DendriteNode node, DendriteNode parent) { XMax = Math.Max(XMax, node.gx); XMin = Math.Min(XMin, node.gx); YMax = Math.Max(YMax, node.gy); YMin = Math.Min(YMin, node.gy); ZMax = Math.Max(ZMax, node.gz); ZMin = Math.Min(ZMin, node.gz); //親ノードと子ノード間のユークリッド距離 double d = node.EuclideanDistanceTo(parent); node.RealDistance = parent.RealDistance + d; //二点のノードの平均半径 double aveRadius = (node.Radius + parent.Radius) / 2; //電気的距離 R = ρ*L/(pi*r_ave^2) 定数部分は除去して R = L/r_ave^2 node.ElectricalDistance = parent.ElectricalDistance + d / (aveRadius); MaxRealDistance = Math.Max(node.RealDistance, MaxRealDistance); MaxElectricalDistance = Math.Max(node.ElectricalDistance, MaxElectricalDistance); TotalLength += d; TotalElectricalLength += d / aveRadius; foreach (var next in node.ConnectedNodes) { if (next != parent) { SetDistanceRec(next, node); } } }