已知两点经纬度求球面最短距离的公式推导过程(几何法加向量法)

已知两点经纬度计算球面距离的公式,一搜一大堆,形式如下:

可是至于这个公式为什么是这样的,今天推导了一下,详细推导过程如下。首先画个图(图1),要不然空间想象能力差的话容易犯糊涂。首先对图1做个大致的说明,红色的半圆表示赤道,蓝色的圆弧表示本初子午线(也就是经度为0的子午线)。球最上方是北极点,点A和点B分别为要计算的两个点,坐标分别为A(jA,wA)和B(jB,wB)。

图1 示意图

 

再开始推导之前,我们需要在图中绘制一些辅助线,便于后面的描述和推导。如图1所示,A(jA,wA),B(jB,wB)两点分别为球面上的两点,坐标为经纬度表示。延A、B两点分别做垂直于赤道平面的垂线交赤道面为C、D两点。连接C、D两点,然后过A做CD的平行线交BD与点E。至此,所有的辅助线绘制完毕。假设地球为一个规则的圆球,半径为R(其实地球是一个椭球体,赤道的半径比极地的半径稍微大一点点)。

 

第一步:确定已知条件,

 

  • 18
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
当使用句向量结合余弦相似度来判断两个文本的相似度时,可以使用Python的文本处理库(如NLTK)和预训练的词向量模型(如Gensim)来实现。以下是一个示例代码: ```python import nltk from gensim.models import Word2Vec from sklearn.metrics.pairwise import cosine_similarity # 读取文本文件 def read_text_file(file_path): with open(file_path, 'r', encoding='utf-8') as file: text = file.read() return text # 对文本进行分词 def tokenize_text(text): sentences = nltk.sent_tokenize(text) word_tokens = [nltk.word_tokenize(sentence) for sentence in sentences] return word_tokens # 计算句子的句向量表示 def calculate_sentence_vector(word_tokens, word2vec_model): sentence_vector = [] for tokens in word_tokens: vectors = [] for token in tokens: if token in word2vec_model.wv: vectors.append(word2vec_model.wv[token]) if vectors: sentence_vector.append(sum(vectors) / len(vectors)) return sentence_vector # 计算两个句子的相似度(余弦相似度) def calculate_similarity(sentence_vector1, sentence_vector2): similarity_matrix = cosine_similarity(sentence_vector1, sentence_vector2) return similarity_matrix[0][0] # 主函数 def main(): # 加载预训练的词向量模型 word2vec_model = Word2Vec.load('your_word2vec_model_path') # 读取文本文件 text1 = read_text_file('text1.txt') text2 = read_text_file('text2.txt') # 分词 word_tokens1 = tokenize_text(text1) word_tokens2 = tokenize_text(text2) # 计算句向量表示 sentence_vector1 = calculate_sentence_vector(word_tokens1, word2vec_model) sentence_vector2 = calculate_sentence_vector(word_tokens2, word2vec_model) # 计算相似度 similarity = calculate_similarity(sentence_vector1, sentence_vector2) print('相似度:', similarity) if __name__ == '__main__': main() ``` 在上述代码中,需要将"your_word2vec_model_path"替换为你自己训练或下载的词向量模型的文件路径。同时,需要将"text1.txt"和"text2.txt"替换为你要比较相似度的两个文本文件路径。 请确保已安装NLTK、Gensim和scikit-learn库,可以使用pip命令进行安装: ``` pip install nltk gensim scikit-learn ``` 此代码示例将两个文本文件分别读取并进行分词处理,然后使用预训练的词向量模型计算句向量表示,最后通过余弦相似度计算两个句子的相似度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值