如何用C语言计算两点之间距离

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用C语言计算两点之间距离相关的知识,希望对你有一定的参考价值。

用C语言计算两点之间距离的参考代码:

#include <stdio.h>

#include <stdlib.h>

#include "math.h"

typedef struct point

    double x;

    double y;

point;

point array[30001];

double distance(point a,point b);

int main(int argc, char *argv[]) 

    while(1)

    int n,i,j,count;

    double maxdis,temp;

    scanf("%d",&n);

    for(i = 0;i<n;i++)

        scanf("%f %f",&array[i].x,&array[i].y);      

   

    for(i = 0;i<n;i++)

        //printf("%d %d\\n",array[i].x,array[i].y);

        //printf("dis:%.2f\\n",distance(array[0],array[i]));

   

    maxdis = 0.0;

    for(i = 0;i<n;i++)

        for(j = i;j<n;j++)

            if(distance((array[i]),(array[j])) > maxdis )

                //printf("maxdis = :%.2f\\n",distance((array[i]),(array[j])));

                maxdis =distance((array[i]),(array[j]));

           

       

   

    printf("%.2f",maxdis);

    

    system("pause");

    return 0;

//计算x y之间距离

double distance(point a,point b)

    return sqrt(    (a.x - b.x)*(a.x - b.x)  +   (a.y -b.y)*(a.y -b.y)  );

扩展资料:

C语言编写注意事项:

1、所有自定义变量 必须声明才能使用。

2、每行只书写一条语句, 在运算符两边加上一个空格, 便于阅读。

3、整数除法将自动舍位, 不会进行四舍五入的操作。

4、for(初始化部分;条件部分;增长部分) - 比while 更适用于初始化和增长步长都是单条语句情况下。

5、使用 #define 名字 替换文本 对部分"幻数" 赋予意义便于阅读 #define结尾不需要“;”号结束。

参考技术A 如果两点带有xy坐标的话,直接编写三角函数就可以解算这两点间的距离。在纸上画个图,算法一目了然 参考技术B #include<stdio.h>
#include<math.h>
int main()

float xa,ya,xb,yb,s;
scanf("%f%f%f%f",&xa,&ya,&xb,&yb);
s=sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb));
printf("%g",s);
return 0;
本回答被提问者采纳

如何用 lng 和 lat 获得地球上两点之间的距离或弧度?

【中文标题】如何用 lng 和 lat 获得地球上两点之间的距离或弧度?【英文标题】:how to get the distance or radian between two point on the earth with lng and lat? 【发布时间】:2015-05-06 10:18:14 【问题描述】:

【问题讨论】:

【参考方案1】:

在这种情况下,您可能不想要mapReduce,但实际上是aggregation framework。除了一般的第一阶段查询外,您还可以通过$geoNear 运行,这对您的目的更有效。

db.places.aggregate([
     "$geoNear": 
        "near": 
            "type": "Point",
            "coordinates": [ -88 , 30 ]
        ,
        "distanceField": "dist"
    ,
     "$match": 
        "loc": 
            "$centerSphere": [ [ -88 , 30 ] , 0.1 ]
        
    
])

或者坦率地说,因为最初的$geoNear 阶段会将一个附加字段“投影”到包含与查询的“原点”的“距离”的文档中,那么您可以在后续的那个元素上“过滤”阶段:

db.places.aggregate([
     "$geoNear": 
        "near": 
            "type": "Point",
            "coordinates": [ -88 , 30 ]
        ,
        "distanceField": "dist"
    ,
     "$match": 
        "dist":  "$lte": 0.1 
    
])

由于这是一个可以“生成/投影”表示结果中距离的值的选项,因此满足您的第一个标准。 “聚合框架”的“链接”性质允许“附加过滤”或您在过滤初始查询后需要执行的任何其他操作。

所以$geoWithin$match 阶段下的聚合框架中的工作效果与在任何标准查询中一样好,因为它不“依赖”于存在的地理空间来源的“索引”。它在带有一个的初始查询中表现更好,但它不需要它。

由于您的要求是距原点的“距离”,因此最合乎逻辑的做法是执行将返回此类信息的操作。就是这样。

希望在此回复中包含所有相关链接,但作为新的回复者,我现在只允许两个链接。


另一个相关说明:

任何操作中“距离”或“半径”的测量取决于数据的存储方式。如果它是“传统”或“键/对或普通数组”格式,则该值将以“弧度”表示,否则如果数据在“位置”上以 GeoJSON 格式表示,则“距离数据”为改为以“米”表示。

考虑到 MongoDB 服务实现的库以及它如何与存储的数据交互,这是一个重要的考虑因素。如果您愿意正确查看,官方资源中当然有关于此的文档。再说一次,我现在不能添加这些链接,除非这个回复看到了一些急需的爱。

【讨论】:

我真的需要一个 mapreduce 作业,而不是聚合框架。也许标题应该是“如何用 lng 和 lat 得到地球上两点之间的距离?” mongodb 已经解决了这个问题。所以,我想知道它是如何解决这个问题的。 @cola 这里的问题是,只有提到的$geoNear操作和另一种单独的命令形式geoNear是返回点之间投影“距离”的唯一方法,没有办法用 mapReduce 调用它。我可以注意到,除了“如何返回距离”之外,您真的不会问任何其他问题,示例当然会这样做。否则,您将需要包含必要的 JavaScript 代码才能计算距离。无论如何,聚合可能是获得您想要的结果的更好方法。它当然更快。 非常感谢您的帮助!但是,我真的需要“如何用lng和lat获得地球上两点之间的距离或弧度?” .我的集群是一个hadoop集群而不是mongodb。我的任务是离线和批处理。所以,我确信我不需要 mongodb。我试图找到“如何用 lng 和 lat 获得地球上两点之间的距离或弧度?”在 mongodb 源中,但找不到。所以,我需要帮助。【参考方案2】:

https://github.com/mongodb/mongo/blob/master/src/third_party/s2/s2latlng.cc#L37

GetDistance() 返回一个 S1Angle,S1Angle::radians() 将返回弧度。

这属于 s2-geometry-library(google code 将关闭,我将其导出到我的github。Java)。

【讨论】:

以上是关于如何用C语言计算两点之间距离的主要内容,如果未能解决你的问题,请参考以下文章

c语言关于求“已知坐标的两点之间距离的距离”的问题

用C语言和分治算法 求最近的两点的距离~

C语言试题八十四之求空间两点之间的距离

C语言试题八十四之求空间两点之间的距离

C语言编程问题:使用函数计算两点间的距离。

如何用C语言计算圆的面积