找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 133|回复: 0

判断两条线是否平行,若平行,则求出平行距离

[复制链接]

主题

0

回帖

0

积分

管理员

积分
0
发表于 2024-3-5 10:42:08 | 显示全部楼层 |阅读模式
  1. // 判断两条线是否平行,若平行,则求出平行距离
  2. static double lines采用parellel(const AcGeVector2d l1, const AcGeVector2d l2)
  3. {
  4.          double x1 = l1[0], y1 = l1[1], x2 = l1[2], y2 = l1[3];                      // 两点式:(y-y1)/(y2-y1)=(x-x1)/(x2-x1)
  5.          double a1 = -(y2 - y1), b1 = x2 - x1, c1 = (y2 - y1) * x1 - (x2 - x1) * y1; // 一般式:a1x+b1y1+c1=0
  6.          double x3 = l2[0], y3 = l2[1], x4 = l2[2], y4 = l2[3];                      // 两点式:(y-y3)/(y4-y3)=(x-x3)/(x4-x3)
  7.          double a2 = -(y4 - y3), b2 = x4 - x3, c2 = (y4 - y3) * x3 - (x4 - x3) * y3; // 一般式:a2x+b2y1+c2=0
  8.          AcGePoint2d p3(x3, y3), p4(x4, y4);
  9.          double d = 0;
  10.          if (!(p3 != p4 && a1 * x3 + b1 * y3 + c1 == 0 && a1 * x4 + b1 * y4 + c1 == 0)) // 排除重合的情况
  11.          {
  12.                  if (b2 == 0 && b1 == 0) // l2,l1垂直x轴
  13.                  {
  14.                          d = abs(c1 / a1 - c2 / a2);
  15.                  }
  16.                  else if (b2 != 0 && b1 != 0 && a2 / b2 == a1 / b1) // l2,l1斜率相同
  17.                  {
  18.                          d = abs(c1 - b1 * c2 / b2) / sqrt(a1 * a1 + b1 * b1);
  19.                  }
  20.          }
  21.          return d;
  22. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 14:54 , Processed in 0.129993 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表