关于管线碰撞模块的构建与优化
基本判断碰撞方法:
1、两条空间管线中心线之间的最小线距 与(管线管径和 / 2)相比较,得出碰撞关系。
2、分割线法
主要问题(如何寻找管线对进行判断):
一、使用暴力法
C(N,2)进行组合运算,得出所有可能,一一计算判定。
//暴力碰撞方法
int t = 0;
foreach (KeyValuePair<string, LineD> line1 in Pipes_Data)
{
foreach (KeyValuePair<string, LineD> line2 in Pipes_Data.Where(x => x.Key != line1.Key))
{
if (Haslntersection(line1.Value.gxdbh,line2.Value.gxdbh))
{
//两条中心线之间的最小距离
double distance = DistanceBetweenLineSegments(line1.Value, line2.Value);
//最小不碰撞的距离
double dis_min = line1.Value.gj / 2000 + line2.Value.gj / 2000;
if ((distance + rongcha) < dis_min)
{
string text = string.Format("最小距离{0} |