点到线段的距离(向量)

一,很自然的想法就是判断点和线段的位置关系已经点的垂点是否在线段上,然后每种情况分别计算。

  这种做法显然可行,只是觉得比较繁琐,想要更简单一点的计算方式;

二,

       向量做法,

     推荐看这篇博客https://blog.csdn.net/angelazy/article/details/38489293

      我觉说得挺好的,看了很容易理解

我自己写的代码

#include<bits/stdc++.h>
using namespace std;

#define ll long long
const int maxn = 1000 + 10;
const ll mod = 998244353;

struct point { int x, y; };

double get_distance(point p, point A, point B) {
	point Ap, Ab, Bp;
	Ap.x = p.x - A.x, Ap.y = p.y - A.y;
	Ab.x = B.x - A.x, Ab.y = B.y - A.y;
	Bp.x = p.x - B.x, Bp.y = p.y - B.y;
	double r = (Ap.x*Ab.x + Ap.y*Ab.y)*1.0 / (Ab.x*Ab.x + Ab.y*Ab.y);

	if (r <= 0)return sqrt(Ap.x*Ap.x*1.0 + Ap.y*Ap.y);
	if (r >= 1)return sqrt(Bp.x*Bp.x*1.0+Bp.y*Bp.y);
	double px = A.x + Ab.x*r;
	double py = A.y + Ab.y*r;
	return sqrt((p.x-px)*(p.x-px)+(p.y-py)*(p.y-py));
}

int main() {

	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	

	return 0;
}

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值