Scala实现:已知三点坐标,求最短距离(如果在垂足不在线段内,最短距离为到其中一点的直线距离)


/**  * 已知三点坐标,求其中一点到另两点的垂线距离  * (如果在垂足不在线段内,最短距离为到其中一点的直线距离)  * Created by wzq on 17-11-2.  */object Point2lineDistance {  def main(args: Array[String]) {    val v: Double = pointToLine(-3, 0, 3, 0, 0, 3)    System.out.println(v)  }

def pointToLine(x1: Int, y1: Int, x2: Int, y2: Int, x0: Int, y0: Int): Double = {    var space: Double = 0    var a: Double = .0    var b: Double = .0    var c: Double = .0    a = lineSpace(x1, y1, x2, y2) // 线段的长度    b = lineSpace(x1, y1, x0, y0) // (x1,y1)到点的距离    c = lineSpace(x2, y2, x0, y0) // (x2,y2)到点的距离    if (c <= 0.000001 || b <= 0.000001) {      space = 0      return space    }    if (a <= 0.000001) {      space = b      return space    }    //钝角三角形的最小边长    if (c * c >= a * a + b * b) {      space = b      return space    }    if (b * b >= a * a + c * c) {      space = c      return space    }    val p: Double = (a + b + c) / 2 // 半周长    val s: Double = Math.sqrt(p * (p - a) * (p - b) * (p - c)) // 海伦公式求面积    space = 2 * s / a // 返回点到线的距离(利用三角形面积公式求高)    space  }

// 计算两点之间的距离  private def lineSpace(x1: Int, y1: Int, x2: Int, y2: Int): Double = {    var lineLength: Double = 0    lineLength = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))    lineLength  }}
时间: 2024-10-24 11:51:06

Scala实现:已知三点坐标,求最短距离(如果在垂足不在线段内,最短距离为到其中一点的直线距离)的相关文章

已知三点,求三角形面积

已经知道三角形三点A(X1,Y1) B(X2,Y2) C(X3,Y3) \[ \vec{AB} = (X2-X1,Y2-Y1) \] \[ \vec{AC} = (X3-X1,Y3-Y1) \] \[ ||n|| = \vec{AB} \times \vec{AC} = |\vec{AB}|\cdot|\vec{AB}|*Sin<\vec{AB},\vec{AC}> \] \[ 因为 |\vec{AB}|*Sin<\vec{AB},\vec{AC}> 为三角形的高 \] \[ 所以

已知三点求圆心与半径

已知三点求圆心与半径  [email protected] http://blog.csdn.net/kezunhai 在计算机图像图形学中,经常会用到求圆心或圆半径的情况,本文介绍一种已知三个点求圆心和圆半径的方法(当然三个点不能共线,共线的三个点不能构成圆). 原理:相互连接三个点,选取其中的任意两条直线,通过对这两条直线的中心做垂线,两条垂线的交点就是圆心,以此点为圆心,以此点到任意一点的距离为半径画圆. 三个点分别计为pt1, pt2, pt3:取直线p1p2和p1p3(也可以取其他直线

已知一个数组,求数组中心元素

/** * */package Student_System;import java.util.*;import java.util.*;/**Homework11 * *Homework1101 *已知一个数组,求数组中心元素 * @author 读你一世 * * QQ: 1816274408 *2017年4月11日上午10:25:03 * */public class Homework1101 { public static void main(String[] args){ Scanner

java 空间四点定位,可跟据已知的四点坐标(x,y,z)及距离计算所在位置坐标

public static void main(String args[]) { try{ float point[]=new float[3]; Location loc = new Location(); //获得坐标 point[0] = 0; point[1] = 0; point[2] = (float) 0.5; loc.set_point(point,1); point[0] = 0; point[1] = -1; point[2] = 2; loc.set_point(point

Maximal Area Quadrilateral CodeForces - 340B || 三点坐标求三角形面积

Maximal Area Quadrilateral CodeForces - 340B 三点坐标求三角形面积(可以带正负,表示向量/点的不同相对位置): http://www.cnblogs.com/xiexinxinlove/p/3708147.html https://jingyan.baidu.com/article/a65957f49596ab24e67f9be7.html 枚举对角线,求出在对角线两侧取任意点能得到的三角形的面积,然后对于每条对角线,最大值就是两侧面积最大值之和. 1

POJ3449 正方形已知对角线两点坐标,求另外两点

已知对角线两点(x0,y0) (x1,y1) x1+x3 = x0+x2; x1-x3  =  y2-y0; y1+y3 =  y0-y2; y1-y3 =  x0-x2; 1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <algorithm> 5 #include <queue> 6 #include <map> 7 #inclu

已知正方形对角线两点求另外两点

正方形,已知 (x0,y0) 和(x2,y2)  可以根据下列关系求(x1,y1),(x3,y3) x1+x3 = x0+x2; x1-x3  =  y2-y0; y1+y3 =  y0+y2; y1-y3 =  x0-x2; node[0].p[1].x = ((node[0].p[0].x+node[0].p[2].x)+(node[0].p[2].y-node[0].p[0].y))/2; node[0].p[1].y = ((node[0].p[0].y+node[0].p[2].y)+

Luogu-P1027 Car的旅行路线 已知三点确定矩形 + 最短路

传送门:https://www.luogu.org/problemnew/show/P1027 题意: 图中有n个城市,每个城市有4个机场在矩形的四个顶点上.一个城市间的机场可以通过高铁通达,不同城市间要通过飞机.现在问从s到t城市最少需要多少的费用. 思路: 已知矩形的三个顶点,可以用勾股定理确定斜边后,利用平行四边形原理——两对对角顶点的x之和是相同的,y之和也是相同的得到第四个顶点.然后用求最短路的dji即可. #include <algorithm> #include <iter

已知前序中序求后序-二叉树

writer:pprp 思路很容易理解,但是实现还是有一点难度,容易错 参考书目:<算法竞赛宝典> 代码如下: //已知前序中序,求后序 #include <iostream> using namespace std; //a是前序,b是中序 void hwg(string a,string b) { int ll,lr; for(unsigned int i = 0; i < b.length(); i++) { if(a[0] == b[i]) //找到根节点 { ll