gpt4 book ai didi

javascript - 为什么这个圆公式在 Javascript 中给出的是椭圆体,而在 Python 中给出的是圆?

转载 作者:行者123 更新时间:2023-12-03 06:23:03 24 4
gpt4 key购买 nike

我将以下代码改编为在page上找到的python代码:相当于 Javascript。

import math

# inputs
radius = 1000.0 # m - the following code is an approximation that stays reasonably accurate for distances < 100km
centerLat = 30.0 # latitude of circle center, decimal degrees
centerLon = -100.0 # Longitude of circle center, decimal degrees

# parameters
N = 10 # number of discrete sample points to be generated along the circle

# generate points
circlePoints = []
for k in xrange(N):
# compute
angle = math.pi*2*k/N
dx = radius*math.cos(angle)
dy = radius*math.sin(angle)
point = {}
point['lat']=centerLat + (180/math.pi)*(dy/6378137)
point['lon']=centerLon + (180/math.pi)*(dx/6378137)/math.cos(centerLat*math.pi/180)
# add to list
circlePoints.append(point)

print circlePoints

这些点之间的距离应该是恒定的。

据我所知,我的 JS 版本是等效的:

  var nodesCount = 8;
var coords = [];

for (var i = 0; i <= nodesCount; i++) {
var radius = 1000;
var angle = Math.PI*2*i/nodesCount;
var dx = radius*Math.cos(angle);
var dy = radius*Math.sin(angle);

coords.push([(rootLongitude + (180 / Math.PI) * (dx / EARTH_RADIUS) / Math.cos(rootLatitude * Math.PI / 180)),(rootLatitude + (180 / Math.PI) * (dy / EARTH_RADIUS))]);
}

但是当我输出这个时,坐标与中心的距离不等。

这非常令人沮丧——我已经尝试调试这个问题一天了。谁能看出是什么导致 JS 代码失败?

最佳答案

不知何故,你的纬度/经度颠倒了。

var linkDistance = 10; //$('#linkDistance').val();
var nodesCount = 8;
var bandwidth = "10 GB/s";
var centerLat = 35.088878;
var centerLon = -106.65262;
var EARTH_RADIUS = 6378137;

var mymap = L.map('mapid').setView([centerLat, centerLon], 11);

L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpandmbXliNDBjZWd2M2x6bDk3c2ZtOTkifQ._QA7i5Mpkd_m30IGElHziw', {
maxZoom: 18,
attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
'<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
'Imagery © <a href="http://mapbox.com">Mapbox</a>',
id: 'mapbox.streets'
}).addTo(mymap);


function drawNext(centerLat, centerLon) {
var coords = [];

for (var i = 0; i < nodesCount; i++) {
var radius = linkDistance * 1000;
var angle = Math.PI * 2 * i / nodesCount;
var dx = radius * Math.cos(angle);
var dy = radius * Math.sin(angle);

var lat = centerLon + (180 / Math.PI) * (dy / 6378137);
var lon = centerLat + (180 / Math.PI) * (dx / 6378137) / Math.cos(centerLon * Math.PI / 180);

coords.push([lat, lon]);
}

for (var i = 0; i < coords.length; i++) {
new L.Circle(coords[i], 500, {
color: 'black',
fillColor: '#f03',
fillOpacity: 0.1
}).addTo(mymap);
console.log("added circle to: " + coords[i]);
}

}

drawNext(centerLon, centerLat);


var popup = L.popup();

function onMapClick(e) {
popup
.setLatLng(e.latlng)
.setContent("You clicked the map at " + e.latlng.toString())
.openOn(mymap);
}

mymap.on('click', onMapClick);
#mapid {
height: 500px;
}
<script src="https://npmcdn.com/leaflet@1.0.0-rc.2/dist/leaflet-src.js"></script>
<link href="https://npmcdn.com/leaflet@1.0.0-rc.2/dist/leaflet.css" rel="stylesheet"/>
<div id="mapid"></div>

关于javascript - 为什么这个圆公式在 Javascript 中给出的是椭圆体,而在 Python 中给出的是圆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38777840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com