两点间距离公式--hypot函数

本文介绍了一个简单实用的方法来计算二维平面上两点之间的距离。通过使用C++标准库中的hypot函数,可以有效减少代码量并提高计算效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

紫书上有一个求两点间距离的题目,有一个小函数非常好用,就是hypot,省去了写哗啦哗啦一把的代码。

代码:

#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
struct Point{
    int x, y;
};
int solve(Point p1,Point p2)
{
    return hypot(p1.x - p2.x,p1.y - p2.y);
}
int main()
{
    Point p1, p2;
    cin>>p1.x>>p1.y>>p2.x>>p2.y;
    int ans = solve(p1,p2);
    cout<<ans<<endl;
    return 0;
}


### Python 计算两个坐标点之距离的方法 在 Python 中,可以利用多种方法来计算两个地理坐标点之距离。如果考虑地球曲率的影响,则通常采用大圆距离公式(Haversine Formula)。以下是基于 Haversine 公式的实现方式: #### 使用 Haversine 公式计算球面两点的大圆距离公式适用于经纬度表示的地理位置,并能提供较为精确的距离估计。 ```python import math def haversine(lat1, lon1, lat2, lon2): R = 6371e3 # 地球半径,单位米 phi1 = math.radians(lat1) # 将纬度转换为弧度制 phi2 = math.radians(lat2) delta_phi = math.radians(lat2 - lat1) # 纬度差 delta_lambda = math.radians(lon2 - lon1) # 经度差 a = (math.sin(delta_phi / 2)**2 + math.cos(phi1) * math.cos(phi2) * math.sin(delta_lambda / 2)**2) c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) d = R * c # 距离,单位为米 return d # 示例调用 distance = haversine(52.2296756, 21.0122287, 41.8919300, 12.5113300) print(f"Distance: {distance} meters") # 输出结果以米为单位 ``` 此函数实现了通过给定两组经纬度 `(lat1, lon1)` 和 `(lat2, lon2)` 来返回它们之的直线距离[^1]。 --- #### 利用 `geopy` 库简化操作 除了手动编写 Haversine 函数外,还可以借助第三方库 `geopy` 实现更简洁的功能。 安装 geopy: ```bash pip install geopy ``` 代码示例: ```python from geopy.distance import geodesic pointA = (52.2296756, 21.0122287) # 点 A 的经纬度 pointB = (41.8919300, 12.5113300) # 点 B 的经纬度 distance = geodesic(pointA, pointB).meters # 返回距离,单位为米 print(f"Geodesic Distance: {distance} meters") ``` 这里使用了 `geopy` 提供的 `geodesic()` 方法,能够自动处理复杂的地理距离计算逻辑[^1]。 --- #### 平面上欧几里得距离的简单计算 对于二维平面中的直角坐标系下的点,可以直接应用勾股定理求解两者的欧式距离。 ```python def euclidean_distance(x1, y1, x2, y2): dx = x2 - x1 dy = y2 - y1 return math.hypot(dx, dy) # 示例调用 dist = euclidean_distance(1, 2, 4, 6) print(f"Euclidean Distance: {dist}") ``` 这种情况下无需考虑地球表面弯曲特性,仅需关注笛卡尔坐标的相对位置关系即可完成测量[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值