0

私は素晴らしいGoogle Maps Shapes ライブラリを使用して、4 つのポイントでマップ上に楕円を描画しています。問題は、楕円が私が想定した「長方形/正方形」の境界を破っていることです。

[編集 - 更新された画像]

境界を破る方法の例については、次の図を参照してください。

ここに画像の説明を入力

ピンクの点は、私が望む外接する長方形です (緑のものは無視してください)

この楕円をそれらの境界内に保つにはどうすればよいですか (ここでの目標は、中心から始まる青/緑とオレンジの線の外側に一致することです)。

[編集]

いくつかのマーカーの配置ですが、これらはユーザーの入力に応じて変化します

_s.OVAL_MARKERS = [
    // Top
    new google.maps.LatLng(51.583487043925224, -0.16044229844476376),
    // Right
    new google.maps.LatLng(51.58339184515312, -0.16013348842307096),
    // Bottom
    new google.maps.LatLng(51.58317916077958, -0.16026707625337622),
    // Left
    new google.maps.LatLng(51.583331361647325, -0.16064041535150864)
];

楕円を作成するために使用しているコード(変数を明確にするために、この投稿用に変更されています)

var b = new _g.LatLngBounds();

_s.OVAL_MARKERS.forEach(function (m) {
    b.extend(m);
});

var major_axis = _gs.computeDistanceBetween(
    b.getNorthEast(),
    new _g.LatLng(
        b.getSouthWest().lat(),
        b.getNorthEast().lng()
    )
) / 2;
var minor_axis = _gs.computeDistanceBetween(
    new _g.LatLng(b.getCenter().lat(), b.getSouthWest().lng()),
    new _g.LatLng(b.getCenter().lat(), b.getNorthEast().lng())
) / 2;
4

1 に答える 1

1

あなたの短軸の計算は完全に間違っています。現在、4 つの点すべてを通過する楕円を作成しています。これを行う代わりに、エッジ間の距離を計算する必要があります。言い換えると:

var minorAxis = _gs.computeDistanceBetween(_m[1], _m[3]);
var majorAxis = _gs.computeDistanceBetween(_m[1], _m[2]);

(1 は 2 と 3 に接続された頂点であると仮定)

これにより、探している軸の長さが短くなります。次のステップは、その方向を定義することです。Google マップで楕円を描いたことがないので、楕円についてはお手伝いできません。

http://mathworld.wolfram.com/Ellipse.htmlには、日食をさまざまな形状にバインドするための式のリストなど、役立つ楕円の情報が記載されています。

于 2013-05-15T16:12:07.307 に答える