首页 > 其他分享 >点到线段的距离

点到线段的距离

时间:2023-10-18 23:45:33浏览次数:33  
标签:Distance return 线段 float 距离 点到 2.0 Vector2

情况1

情况2

情况3

情况4

 

public static float PointToLineSegmentDistance(Vector2 P, Vector2 A, Vector2 B)
{
    float a = Vector2.Distance(A, B);
    float b = Vector2.Distance(A, P);
    float c = Vector2.Distance(B, P);

    if (b <= float.MinValue || c <= float.MinValue) //与线段的开始或结束点重合
        return 0.0f;

    if (a <= float.MinValue || (c * c >= a * a + b * b))
        return b;

    if (b * b >= a * a + c * c)
        return c;

    // 海伦公式求面积
    // 返回点到线的距离(利用三角形面积公式求高)
    double p = (a + b + c) / 2.0f;
    double s = Math.Sqrt(p * (p - a) * (p - b) * (p - c));
    return (float)(2.0f * s / a);
}

 

标签:Distance,return,线段,float,距离,点到,2.0,Vector2
From: https://www.cnblogs.com/sailJs/p/17762806.html

相关文章

  • 数据链路层传输协议(点到点):停等协议、GBN、SR协议
    数据链路层的传输协议:停等协议、GBN、SR停止等待协议(单窗口的滑动窗口协议) 滑动窗口协议:GBN、SRGBN协议 GBN发送方需响应的三件事1.上层调用(网络层)上层要发送数据时,发送方先检查发送窗口是否已满。如果未满,则产生一个帧并将其发送;如果窗口已满,发送方只需将数据......
  • 关于 K 维空间中整点之间曼哈顿距离最短路径计数问题
    约定\(K\)维空间中,整点的坐标以\(K\)个整数表示,形如\[Point\left(X_1,X_2,\cdots,X_k\right)\]定义两个点的曼哈顿距离为每一维坐标差的绝对值之和,记为\[MD\left(A,B\right)=\sum_{i=1}^{K}\left|{X_{i_A}-X_{i_B}}\right|\]定义两个点\(A\),\(B\)相邻当且仅当......
  • 线段树练习
    习题都来自董老师的博客和b站:LuoguP4198楼房重建其实这道题的思路肯定是用线段树,但是为了计算结果线段树需要维护哪些信息?//mx表示区间内的最大斜率,sum表示区间内可见的,主要就是递归求出sum#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#inclu......
  • 【DFS】129. 求根节点到叶子结点的和
    链接https://leetcode.cn/problems/sum-root-to-leaf-numbers/description/思路时刻记住,DFS是递归的一种。而解决递归,最朴素的思路就是:递归的定义就是递归的解。题目要求我们求根节点到叶子结点的和,我们要提供一个值保持其状态,退出条件直接用题目给的限定即可。代码#Defin......
  • 线段树模板
    线段树理解起来不难,主要是书写起来比较麻烦这里学的是董晓老师的线段树模板#include<bits/stdc++.h>usingnamespacestd;#definelcp<<1#definercp<<1|1#defineN500005intn,w[N];structnode{intl,r,sum,add;//add用于懒标记}tr[N*4];//建树,深搜递归的过......
  • *【学习笔记】(7) 线段树及高级用法
    一.普通线段树线段树(SegmentTree)几乎是算法竞赛最常用的数据结构了,它主要用于维护区间信息(要求满足结合律)。与树状数组相比,它可以实现\(O(logn)\)的区间修改,还可以同时支持多种操作(加、乘),更具通用性。接下来我们用这道模板题为例,看看线段树是怎么维护区间和这一信息的。P33......
  • c++ 线段树模板
    洛谷模板:P3372【线段树1】 #include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e5+10;inta[N],d[N<<2],b[N<<2];intn,q;inlinevoidbuild(intl,intr,intp){if(l==r){d[p]=a[l];......
  • 线段树高阶学习指南
    前置芝士线段树基本框架区间求和constintN=100010;lla[N],st[N*4],f[N*4];intn,q;//向上传voidpushup(llu){st[u]=st[lc]+st[rc];}//向下传voidpushdown(llu,lll,llr,llmid){if(f[u]){st[lc]+=f[u]*(mid-l+1);st[rc]+=f[u]*(r-m......
  • 线段树合并
    P4556[Vani有约会]雨天的尾巴/【模板】线段树合并有\(n(n≤10^5)\)个点,形成树状结构。有\(m(m≤10^5)\)次发放操作,每次选择两个点\(x,y\),对\(x\)到\(y\)的路径上(包括\(x,y\))的每个点发放一个\(z(z≤10^5)\)类型的物品。求完成所有操作后,每个点存放最多的是哪种......
  • 一道有趣的线段树题目
    \(T4\)莫队首先我们需要知道一种统计答案的方法。我们记\(R_i\)表示右边第一个和他相同的位置。那么我们记\(a_i=\min(a_{i+1},R_i)\),那么贡献就是\(a_i-i+1\),所以我们最后就是要维护\(a_i\)就好了。但是实际上如果你要直接维护\(a_i\)没有任何性质是做不了的。......