首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >绘制一条具有给定半径和两个位置的曲线

绘制一条具有给定半径和两个位置的曲线
EN

Stack Overflow用户
提问于 2014-07-24 08:09:18
回答 2查看 5.1K关注 0票数 1

我有两个位置,在这两个位置之间,我必须根据半径绘制一条曲线。我画了一幅画:

我知道怎么画圆圈。但如何只画圆圈的一部分呢?

以下是已知的参数:

  • 当前位置
  • 下一地点
  • 曲线/圆半径

如果有人能告诉我如何在当前位置和下一个位置之间的圆圈上得到点,我可以用polyline来绘制曲线。但是如何计算位置呢?

EN

Stack Overflow用户

发布于 2014-07-26 07:43:36

你可以用这个Answer画弧。

找到弧形的中心。

您可以使用Google Geometry库来查找两个标记之间的弦长、其方位和弧点的位置。

来自文档的

computeDistanceBetween(从:LatLng,到:LatLng,半径?:number )返回两个LatLngs之间的距离,以米为单位。半径默认为以米为单位的地球半径(6378137)。 computeHeading( from : LatLng,to: LatLng )将标题从一个LatLng返回到另一个LatLng。标题以顺时针方向在范围内从北表示[-180,180]为一个数字。 computeOffset(出发地: LatLng,距离:number,标题:number,radius?:number)返回从指定标题中的原点(从北顺时针方向表示)的距离为LatLng的LatLng。

先找到两个标记之间的距离

代码语言:javascript
运行
复制
var spherical = google.maps.geometry.spherical; 
var point1 = markers[0].getPosition();
var point2 = markers[1].getPosition();
var length = google.maps.geometry.spherical.computeDistanceBetween(point1,point2);

那就找轴承

代码语言:javascript
运行
复制
 var heading = google.maps.geometry.spherical.computeHeading(point1,point2);

正如你现在所知道的三角形的三边(弦长,半径(其它两面)),你用law of cosines计算圆弧中心的方位。(注意,注释中有两个解。)

代码语言:javascript
运行
复制
    function solveAngle(a, b, c) {  // Returns angle C using law of cosines
    var temp = (b * b + c * c - a * a) / (2 * b * c);
    if (temp >= -1 && temp <= 1)
        return Math.acos(temp);
    else
        throw "No solution";
   }

var baseAngle = solveAngle(radius, radius, c);
var vertexAngle = solveAngle(c,radius,radius);

利用baseAngle来确定中心点的方位。

vertexAngle是在绘制弧时使用的点数。

知道方位和半径,你可以找到弧的中心。

代码语言:javascript
运行
复制
var centerPoint = spherical.computeOffset(point1,radius,heading+baseAngle);

注意到距离,以米为单位。将方法中的半径改为3,959英里。

如果半径改变,中心就会改变。黄点是蓝点半径的2倍。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24928317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档