(取自定位导航项目)

哇!这不就是一道初中的数学题嘛!But...

已知三点 A(m,n),B(P,q),C(s,f),并且坐标都是已知的。

通过直线方程 y=kx+b及A、B两点,可求得直线AB的直线方程中的斜率K及b。

则直线方程已知,通过两点间距离公式,可以求得线段AC的长度。

下面是手写过程:是不是很生动形象

//直线方程
//起点
Point beginPoint  = new Point(100,348);
//终点
Point overPoint = new Point(662,1067);
// 第一步:求得直线方程相关参数y=kx+b
// 坐标直线斜率k
double k = (overPoint.y - beginPoint.y)*1.0/(overPoint.x - beginPoint.x);
// 坐标直线b //最终直线方程  y=1.2605633802816902x+221.94366197183098
double b = beginPoint.y - k * beginPoint.x;
// 两点的坐标距离(走的一段路的距离)
double lineDis = Math.sqrt(Math.pow(locX - nextX, 2)*1.0
        + Math.pow(locY - nextY, 2));

//将直线公式与坐标距离公式求解方程组,得出在线上距离相同的坐标点
double A = Math.pow(k, 2) + 1;// A=k^2+1;

double B = -2 * ((locY -b ) * k + locX);// B=2[(b-y0)k-x0];
// C=(b-y0)^2+x0^2-L^2
double C = Math.pow(locY - b, 2) + Math.pow(locX, 2)- Math.pow(lineDis, 2);
// 两根x1,x2= [-B±√(B^2-4AC)]/2A
double x1 = (-B + Math.sqrt(Math.pow(B, 2) - 4 * A * C)) / (2 * A);

double x2 = (-B - Math.sqrt(Math.pow(B, 2) - 4 * A * C)) / (2 * A);

惊喜总是在最后:完整版

private void pointXY() {Point curPoint = new Point(20, 30);// 当前坐标
    Point nextPoint = new Point(35, 42);// 下个点坐标
    double distance = Math.sqrt(Math.pow(curPoint.x - nextPoint.x, 2)+ Math.pow(curPoint.y - nextPoint.y, 2));// 两点的坐标距离
    double lenthUnit = distance / 5;// 单位长度
    // 第一步:求得直线方程相关参数y=kx+b
    double k = (curPoint.y - nextPoint.y) * 1.0
            / (curPoint.x - nextPoint.x);// 坐标直线斜率k
    double b = curPoint.y - k * curPoint.x;// 坐标直线b
    // 第二步:求得在直线y=kx+b上,距离当前坐标距离为L的某点
    double A = Math.pow(k, 2) + 1;// A=k^2+1;
    double B = 2 * ((b - curPoint.y) * k - curPoint.x);// B=2[(b-y0)k-x0];
    double L =lenthUnit;
    // C=(b-y0)^2+x0^2-L^2
    double C = Math.pow(b - curPoint.y, 2) + Math.pow(curPoint.x, 2)- Math.pow(L, 2);
    // 两根x1,x2= [-B±√(B^2-4AC)]/2A
    double x1 = (-B + Math.sqrt(Math.pow(B, 2) - 4 * A * C)) / (2 * A);
    double x2 = (-B - Math.sqrt(Math.pow(B, 2) - 4 * A * C)) / (2 * A);
    double x = 0;// 最后确定是在已知两点之间的某点
    if (x1 == x2) {x = x1;
    } else if (curPoint.x <= x1 && x1 <= nextPoint.x || nextPoint.x <= x1&& x1 <= curPoint.x) {x = x1;
    } else if (curPoint.x <= x2 && x2 <= nextPoint.x || nextPoint.x <= x2&& x2 <= curPoint.x) {x = x2;
    }double y = k * x + b;
    Point mPoint = new Point((int) x, (int) y);
}

已知A,B两点及C点(不在直线AB上)坐标,求在直线AB上距离A点距离为线段AC长度的点D坐标相关推荐

  1. 鸡兔同笼。已知鸡兔总头数为h,总脚数为f,求鸡兔各有多少只?

    鸡兔同笼.已知鸡兔总头数为h,总脚数为f,求鸡兔各有多少只?  题目:鸡兔同笼.已知鸡兔总头数为h,总脚数为f,求鸡兔各有多少只? 解法一:假设总头数h全部为鸡,程序如下: #include  < ...

  2. (zzulioj1007)鸡和兔关在一个笼子里,鸡有2只脚,兔有4只脚,没有例外。已知现在可以看到笼子里m个头和n只脚,求鸡和兔子各有多少只

    题目描述 鸡和兔关在一个笼子里,鸡有2只脚,兔有4只脚,没有例外.已知现在可以看到笼子里m个头和n只脚,求鸡和兔子各有多少只? 输入 输入两个整数heads和feet,分别代表笼子里头的个数和脚的个数 ...

  3. java已知一个二叉树_大牛带你学 | 由二叉树的遍历序列求二叉树结构的解题方法归纳...

    前言 二叉树章节 属于数据结构考察的三大重点章节(线性表.树.图)之一,不管是在自命题院校考察和408统考都是考察频次很高的考点.今天,大牛学长就来为各位同学总结归纳一个二叉树知识考察中的常见题型的解 ...

  4. C# 已知圆心和两点,用DrawArc()画圆弧(算法)

    (本文转载自)http://www.cnblogs.com/stalwart/archive/2010/12/06/1897636.html 如题,已经知道圆心和两点,画出两点间的圆弧,思路,先分别求 ...

  5. a a c语言表达式是,c语言中,已知a=12,则表达式a+=a-=a*=a的结果是什么,求步骤

    优质回答 回答者:LionelWSE 从右向左算 首先a的值是12 第一步: 计算a*=a a=a*a=144 第二步: 计算a-=144 a=a-144=0 第三步: 计算a+=0 a=a+0=0 ...

  6. 用java求直角三角形的面积_JAVA 已知三角形的三个边判断 是否为直角三角形,如果是求面积!...

    匿名用户 1级 2009-03-21 回答 你是要java的还是jsp的?给你个jsp的把... java的和jsp的差不多...主要还是那个求面积的公式 (1) (2) (3) (4) (5) 请输 ...

  7. 已知序列1,2,3,5,8,...,求第20项的值( C 语言)

    #include<stdio.h> int main() {int num1 = 1, num2 = 2, num3,i;for (int i = 3;i <= 20;i++){nu ...

  8. 已知两个矩形的长和宽,用面向对象的概念编程求它们的面积和周长。假设矩形 1 的长和宽分别为 20 和 50;矩形 2 的长和宽分别为 3.6 和 4.5。(先定义矩形类再实例化两个对象)

    运用类和对象的思想进行编程.代码如下: #include<iostream> using namespace std;class triangle//声明三角形类{private:doub ...

  9. 目前已知摄像头的三维坐标和三维朝向,已知摄像头画面宽高,某一物体在该画面中的位置坐标,以及该物体中心距离摄像头的距离,求该物体在现实世界中的坐标,用c++实现,使用小孔成像原理,直接上代码...

    求解这个问题的过程可以分为以下步骤: 将摄像机坐标系下的物体坐标转换为图像坐标系下的坐标,图像坐标系下的坐标是以图像左上角为原点,x轴向右,y轴向下的二维平面坐标. 将图像坐标系下的坐标转换为归一化平 ...

最新文章

  1. CListCtrl创建方法
  2. vuex入门,详细的讲解
  3. Python中函数的参数传递方式
  4. Java float浮点数精度丢失问题
  5. c语言判断用户名重负,判定方阵的正定负定在C语言中写法.docx
  6. 高质量c/c++编程(9)
  7. 异步任务,邮箱任务,定时任务
  8. 设置访问权限_CentOS7利用Firewall对PostgreSQL设置安全的访问权限
  9. 【白皮书分享】2020用户生命周期运营白皮书2.0.pdf(附下载链接)
  10. 锁定计算机的软件,易通电脑锁(控制上网时间必备软件)
  11. 群控云控SDK开发包(快速开发群控云控微信SCRM客服系统)
  12. 毕业论文的页眉、页脚以及参考文献插入经验分享
  13. Oracle的本地网络服务名配置
  14. 4.Oracle PDB官方解读- Lone PDB对比 non-CDB
  15. js下载当前页面表格为excel
  16. 九章量子计算机地位,“九章”量子计算机这么牛,到底有什么用?|【经纬低调分享】...
  17. 攻防世界 Misc 功夫再高也怕菜刀 参考大佬的wp
  18. Css3学习日志 --css层叠样式表
  19. Pspice积分线路仿真问题汇总(压控电压源模拟理想运放)
  20. 三相滤波器怎么接线_三相电源滤波器分类 详解三相电源滤波器系列

热门文章

  1. 差速巡线机器人设计-满分(100+)的报告-2020
  2. PHP中get和set方法,php中get和set的使用方法
  3. 嵌入式arm linux产品,基于ARM——Linux的嵌入式产品平台构建
  4. windows11字体发虚怎么处理???
  5. 【JavaSE】JavaSE入门--初识Java
  6. 柯美smb扫描出现服务器连接错误_柯尼卡美能达bizhub283服务器连接错误解决办法.pdf...
  7. 手把手,嘴对嘴教你Spring Cloud 微服务实战 -- 前言
  8. win10系统要求配置_安装WinXP、Win7、Win8、Win10系统的最低电脑配置介绍
  9. mingw(msys2)编译ffmpeg
  10. 【FPGA的基础快速入门25------以太网】