首页 > 其他分享 >原点到线段的垂足

原点到线段的垂足

时间:2023-11-08 23:24:41浏览次数:29  
标签:ab 原点 线段 ao proj 垂足 Vector2

原理:

1) 求出向量ao在ab上的投影距离

2) a沿着ab方向移动投影距离就是垂足点的位置

 

// 获得原点到直线ab的垂点
public static Vector2 GetPerpendicularToOrigin(Vector2 a, Vector2 b)
{
    var ab = b - a;
    var ao = Vector2.zero - a;

    float proj = Vector2.Dot(ab, ao) / ab.sqrMagnitude;
    return a + ab * proj;
}

 

标签:ab,原点,线段,ao,proj,垂足,Vector2
From: https://www.cnblogs.com/sailJs/p/17818585.html

相关文章

  • 向量叉乘判断两点是否在线段同侧
    ap1×ab与ap2×ab的结果异号,则表示两点在线段两侧;同号则表示在线段同侧 有一个点在线段上或两个点都在线段上,当做在线段同侧处理 //两点是否在线段同侧publicstaticboolIsTwoPointSameSideOfSegment(Vector2a,Vector2b,Vector2p1,Vector2p2){vara_p1=......
  • 用线段树来接树状数组类的问题
    大致解决的问题就是区间查询以及单点的修改#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=5e5+10;inta[N],tag[N<<2];struct{ struct{ intl,r,sum; }tr[N<<2]; voidpush_up(inti){ tr[i].sum=tr[i<<1].sum+tr[i<......
  • 向量点乘判断点是否在线段上
    几种要考虑的情况1)点p和线段断点a,b重叠,pa•ab=pa.x*pa.y+ab.x*ab.y=02) pa,pb共线,则pa×pb=02-1)p在线段ab上,此时pa,pb的夹角为180度,cos(180)=-1,pa•ab=-|pa|*|ab|2-2)p在线段ab外,此时pa,pb的夹角为0度,cos(0)=1,pa•ab=|pa|*|ab|4)pa,pb不共线,cos(钝角)<0,cos(......
  • 点到线段的距离2
    几种要考虑的情况1)点和线段两端重叠的情况2)点在线段两侧的情况  p在另一侧的情况以此类推3)点在线段中间的情况   //点到线段的距离publicstaticfloatPointToSegmentDistance2(Vector2p,Vector2a,Vector2b){//点和线段端点重合varap=p......
  • 树状数组用线段树来写
    #include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=5e5+10;inta[N],tag[N<<2];struct{ struct{ intl,r,sum; }tr[N<<2]; voidpush_up(inti){ tr[i].sum=tr[i<<1].sum+tr[i<<1|1].sum; } voidbuild(inti......
  • F. Unique Occurrences(线段树分治+可撤销并查集)
    F.UniqueOccurrences假如我们删除所有权值为x的边,那么所有权值为x的边对答案的贡献就是\(\sumsz[u]*sz[v]\)sz表示两个联通块的大小,且(u,v)的边权为x我们可以用可撤销并查集来进行处理,简单来说就是将一条边的存在时间看作区间,然后挂到线段树上,然后遍历到每个叶子的时候进行......
  • Opencascad(C++)-建模-创建有界直线段
    文章目录1、前言2、用gp_Lin创建一条直线2.1gp_Lin类成员函数2.2创建一条直线2.3运行结果3、创建一条有界的直线段3.1功能说明3.2函数说明3.2创建直线段的代码3.3测试效果1、前言在Opencascad开发时,经常会遇到创建直线的情况,采用gp_Line创建的直线段是无界的,如果想创建......
  • 线段树二分
    修改操作可以很简单的在线段树上打标记即可。常规做法直接二分R然后区间查询gcd,复杂度是仨log。upded:其实也是俩log,线段树查询区间gcd是单log。注意到你会将区间拆分成log个子区间,直接查询他们的gcd即可,直接查询为什么不会多乘个log呢。注意到对两个数\(x,y\)做......
  • 可持久化线段树学习笔记
    可持久化线段树前置知识:动态开点线段树基本介绍可持久化线段树可以维护多个版本信息。举个例子:你需要维护这样的一个长度为\(N\(1\len\le10^6)\)的数组,支持如下几种操作在某个历史版本上修改某一个位置上的值访问某个历史版本上的某一位置的值每次操作后生成一......
  • 第 116 场双周赛(双指针,背包问题,线段树+lz标记)
     本题为双指针和贪心。当我们遇到奇数个0或1时,直接将下一位改变即可。classSolution{public:intminChanges(strings){intn=s.size();intres=0;intl=0,r=-1;while(r++<n-1){if(s[l]==s[r])......