使用Java求某点到直线上的投影点

使用Java求已知A,B点坐标,求C点到AB所连直线的投影点

 /**
 * 求直线外一点到直线上的投影点
 *
 * @param pLine    线上一点
 * @param k        斜率
 * @param pOut     线外一点
 * @param pProject 投影点
 */
public static void getProjectivePoint(PointF pLine, double k, PointF pOut, PointF pProject) {
    if (k == 0) {//垂线斜率不存在情况
        pProject.x = pOut.x;
        pProject.y = pLine.y;
    } else {
        pProject.x = (float) ((k * pLine.x + pOut.x / k + pOut.y - pLine.y) / (1 / k + k));
        pProject.y = (float) (-1 / k * (pProject.x - pOut.x) + pOut.y);
    }
}
/**
 * 求pOut在pLine以及pLine2所连直线上的投影点
 *
 * @param pLine
 * @param pLine2
 * @param pOut
 * @param pProject
 */
public static void getProjectivePoint(PointF pLine, PointF pLine2, PointF pOut, PointF pProject) {
    double k = 0;
    try {
        k = getSlope(pLine.x, pLine.y, pLine2.x, pLine2.y);
    } catch (Exception e) {
        k = 0;
    }
    getProjectivePoint(pLine, k, pOut, pProject);
}
/**
 * 通过两个点坐标计算斜率
 * 已知A(x1,y1),B(x2,y2)
 * 1、若x1=x2,则斜率不存在;
 * 2、若x1≠x2,则斜率k=[y2-y1]/[x2-x1]
 *
 * @param x1
 * @param y1
 * @param x2
 * @param y2
 * @throws Exception 如果x1==x2,则抛出该异常
 */
public static double getSlope(double x1, double y1, double x2, double y2) throws Exception {
    if (x1 == x2) {
        throw new Exception("Slope is not existence,and div by zero!");
    }
    return (y2 - y1) / (x2 - x1);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容