`
javababy1
  • 浏览: 1171958 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

计算平面上的二条线的交叉点

 
阅读更多

计算平面上的二条线的交叉点

public static int ccw(Point P0, Point P1, Point P2, bool PlusOneOnZeroDegrees)
{
int dx1, dx2, dy1, dy2;
dx1 = P1.X - P0.X; dy1 = P1.Y - P0.Y;
dx2 = P2.X - P0.X; dy2 = P2.Y - P0.Y;
if (dx1 * dy2 > dy1 * dx2) return +1;
if (dx1 * dy2 < dy1 * dx2) return -1;
if ((dx1 * dx2 < 0) || (dy1 * dy2 < 0)) return -1;
if ((dx1 * dx1 + dy1 * dy1) < (dx2 * dx2 + dy2 * dy2) && PlusOneOnZeroDegrees)
return +1;
return 0;
}
public static int ccw(double P0x, double P0y, double P1x, double P1y, double P2x, double P2y, bool PlusOneOnZeroDegrees)
{
double dx1, dx2, dy1, dy2;
dx1 = P1x - P0x; dy1 = P1y - P0y;
dx2 = P2x - P0x; dy2 = P2y - P0y;
if (dx1 * dy2 > dy1 * dx2) return +1;
if (dx1 * dy2 < dy1 * dx2) return -1;
if ((dx1 * dx2 < 0) || (dy1 * dy2 < 0)) return -1;
if ((dx1 * dx1 + dy1 * dy1) < (dx2 * dx2 + dy2 * dy2) && PlusOneOnZeroDegrees)
return +1;
return 0;
}

//是否相交

public static bool Intersect(Point P11, Point P12, Point P21, Point P22)
{
return ccw(P11, P12, P21, true) * ccw(P11, P12, P22, true) <= 0
&& ccw(P21, P22, P11, true) * ccw(P21, P22, P12, true) <= 0;
}

//交叉点

public static PointF IntersectionPoint(Point P11, Point P12, Point P21, Point P22)
{
double Kx = P11.X, Ky = P11.Y, Mx = P21.X, My = P21.Y;
double Lx = (P12.X - P11.X), Ly = (P12.Y - P11.Y), Nx = (P22.X - P21.X), Ny = (P22.Y - P21.Y);
double a = double.NaN, b = double.NaN;
if (Lx == 0)
{
if (Nx == 0)
throw new Exception("没有相交点!");
b = (Kx - Mx) / Nx;
}
else if (Ly == 0)
{
if (Ny == 0)
throw new Exception("没有相交点!");
b = (Ky - My) / Ny;
}
else if (Nx == 0)
{
if (Lx == 0)
throw new Exception("没有相交点!");
a = (Mx - Kx) / Lx;
}
else if (Ny == 0)
{
if (Ly == 0)
throw new Exception("没有相交点!");
a = (My - Ky) / Ly;
}
else
{
b = (Ky + Mx * Ly / Lx - Kx * Ly / Lx - My) / (Ny - Nx * Ly / Lx);
}
if (!double.IsNaN(a))
{
return new PointF((float)(Kx + a * Lx), (float)(Ky + a * Ly));
}
if (!double.IsNaN(b))
{
return new PointF((float)(Mx + b * Nx), (float)(My + b * Ny));
}
throw new Exception("计算相交点出错");
}

分享到:
评论

相关推荐

    公路施工测量坐标计算系统V5.73

    系统分为积木法坐标计算、交点法坐标计算、互通式立体交叉、纵断面高程计算、放样辅助计算、交会定点计算、导线平差计算、路基土石方计算八大模块。  一、各模块主要功能 1、积木法及交点法坐标计算:可以对公路...

    c++求两条线段的交点坐标

    c++求一个平面内,两条线段的交点坐标。传入四个坐标点,返回一个坐标点。

    论文研究-基于矩形网格追踪法的曲面主曲率等值线生成算法.pdf

    针对自由曲面在展开平面上的主曲率等值线生成问题,提出一种基于矩形网格追踪算法的等值线生成算法。利用面积坐标方法将曲面上的点及其极值曲率映射到优化展开平面上,在展开平面上采用遍历法得出等值点序列;利用...

    路桥测量计算

    1、可同时计算整条线路的中桩或边桩的坐标,支持不限数量条线路; 2、可以解算任何复杂线型及立交匝道,包括C型,S型、卵型、回头曲线等; 3、可以计算与中线非正交交叉的特殊点位的坐标; 4、平面反查功能,输入...

    在另一条多段线上投影平面多段线:在另一条多段线上查找笛卡尔多段线的投影。-matlab开发

    %******************************************************** ********************************** % 函数:poly_poly_proj % 描述:计算一组点的距离(交叉范围) % P &lt;p&gt; 在平面上到平面折线% V ,以及与% P 在 V...

    波动方程成像方法及其计算(张文生2009)

    5.2.3 二、三、四、六、八方向上的算子分裂 5.3 由Kirchhoff积分解导出偏移公式 5.4 混合法四方向分裂偏移 5.4.1 混合法四方向分裂 5.4.2 分裂误差 5.4.3 螺旋线上的四方向波场外推 5.4.4 数值计算 第6章 正多边形...

    二维中两条线的交点:取四个点,给出它们连接线的交点-matlab开发

    极其基础的工具,省去了自己动手做的苦差事。 取 a,b,u,v(形式为 [xy] 的点)并计算线 a-&gt;b 和 u-&gt;v 相交的位置。 返回点。 没有错误检查。

    手机测量程序4.0

    该软件可同时计算整条线路的中桩或边桩的坐标,支持不限数量条线路; 2、可以解算任何复杂线型及立交匝道,包括C型,S型、卵型、回头曲线等; 3、可以计算与中线非正交交叉的特殊点位的坐标; 4、平面反查功能,输入...

    手机测量程序4.5

    该软件可同时计算整条线路的中桩或边桩的坐标,支持不限数量条线路; 2、可以解算任何复杂线型及立交匝道,包括C型,S型、卵型、回头曲线等; 3、可以计算与中线非正交交叉的特殊点位的坐标; 4、平面反查功能,输入...

    布线规则.txt

    2.2 初步划分数字、模拟、DAA电路在PCB板上的布线区域(一般比例2/1/1),数字、模拟元器件及其相应走线尽量远离并限定在各自的布线区域内。 Note:当DAA电路占较大比重时,会有较多控制/状态信号走线穿越其布线区域,...

    轻松工程测量系统v2.01加入绘制横断面功能.rar

    3、可以计算与中线非正交交叉的特殊点位的坐标; 4、平面反查功能,输入已知点坐标可以反算出对应的桩号和偏距; 5、可以计算路面范围内任意点的高程 6、支持断链。 7、坐标正算功能。 8、后方交会功能。 9、批量...

    手机测量程序4.6SP3JAVA版

    4、平面反查功能,输入已知点坐标可以反算出对应的桩号和偏距; 5、可以计算路面范围内任意点的高程 6、计算开挖线和填筑线的功能,输入前视点的坐标和高程即可计算出需移桩的距离。 7、可以计算桥台锥坡。 8、...

    3D图形编程指南 西北工业大学电子工程系 刘长松 程连冀(译)

     5.2.3 直线和平面的交叉点  5.2.4 直线和多边形的交叉点  5.2.5 直线和球的交叉点  5.2.6 寻找合适的交叉点  5.2.7 优化光线追踪  第六章 建模  6.1 线框模型  6.2 多边形模型  6.3 三次曲线和双三次曲面...

    轻松工程测量

     1、可同时计算整条线路的中桩或边桩的坐标,支持不限数量条线路;  2、可以解算任何复杂线型及立交匝道,包括C型,S型、卵型、回头曲线等;  3、可以计算与中线非正交交叉的特殊点位的坐标;  4、平面反查...

    轻松测量软件

    、可以计算路面范围内任意点的高程;...6、平面反查功能,输入已知点坐标可以反算出对应的桩号和偏距、设计高程 7、坐标正算功能; 8、后方交会功能; 9、锥坡放样 10大地坐标转换 11、市政八字口单圆曲线放样

    计算几何:计算几何Unity库,具有交集算法,三角剖分法(例如delaunay,voronoi图,多边形修剪,贝塞尔曲线,耳朵修剪,凸包,网格简化等)的实现

    计算几何统一库 该库包含两个文件夹。 这个想法是,一个用于测试目的,另一个文件夹是您拖入项目的文件夹。...计算几何中的一个常见问题是找到一组点的凸包。 2D空间 贾维斯三月。 也称为“礼品包装”

    intersectPlaneSurf II:平面与任意曲面的交点-matlab开发

    平面与任意表面数据的交点。 曲面必须采用面和顶点结构的形式,例如面片... 该函数实际计算三角形的交线段带有平面的表面和最后所有计算出的线段是相互连接形成一个连续的交叉区域 注意:您必须先编译提供的 mex 文件

    geometer:用Python编写的几何库

    它们的连接线和交叉点可以使用快速矩阵乘法来计算。 库中的大多数计算都是通过张量图完成的(使用numpy.einsum)。 几何图形最初是作为学习练习而构建的,它基于慕尼黑工业大学教授的两个研究生课程。 在该项目上...

    基于多线性结构光的标定方法

    为了校准所有结构化的光平面,首先应根据共面参考目标上不同位置的点对其中的两个进行校准。 在模型中,将摄影机坐标视为全局世界坐标,并且将所有局部世界坐标转换为摄影机坐标,以便可以在摄影机坐标中重建所有点...

Global site tag (gtag.js) - Google Analytics