3 টি অক্ষাংশ / দ্রাঘিমাংশ এবং 3 দূরত্ব ব্যবহার করে ত্রিপক্ষীয়?


34

আমি একটি অজানা লক্ষ্য অবস্থান (অক্ষাংশ এবং দ্রাঘিমাংশ সমবায়) সন্ধান করতে চাই। 3 টি পরিচিত পয়েন্ট রয়েছে (অক্ষাংশ এবং দ্রাঘিমাংশের সমন্বয়যুক্ত জোড়া) এবং প্রতিটি পয়েন্টের জন্য লক্ষ্য স্থানে কিলোমিটারের দূরত্ব distance আমি কীভাবে লক্ষ্য অবস্থানের সমন্বয়গুলি গণনা করতে পারি?

উদাহরণস্বরূপ, বলুন আমার কাছে নিম্নলিখিত ডেটা পয়েন্ট রয়েছে

37.418436,-121.963477   0.265710701754km
37.417243,-121.961889   0.234592423446km
37.418692,-121.960194   0.0548954278262km

আমি যা চাই তা হ'ল কোনও ফাংশনের গণিতটি যা ইনপুট হিসাবে গ্রহণ করে এবং আউটপুট হিসাবে 37.417959, -121.961954 প্রদান করে।

Http://www.movable-type.co.uk/scriptts/latlong.html থেকে দুটি পয়েন্টের মধ্যে কীভাবে দূরত্ব গণনা করতে হবে তা আমি বুঝতে পারি যে এই জাতীয় তিনটি বৃত্তের সাহায্যে আপনি ওভারল্যাপের ঠিক এক পয়েন্ট পাবেন। আমি যেটি নিয়ে আধ্যাত্মিক তা হ'ল এই ইনপুটটি দিয়ে সেই পয়েন্টটি গণনা করার জন্য গণিতের প্রয়োজন।


এখানে এমন একটি পৃষ্ঠা যা আপনাকে তিনটি স্থানাঙ্কের কেন্দ্র খুঁজে বের করার গণিতের মধ্য দিয়ে যায়। সম্ভবত এটি কোনও উপায়ে সহায়তা করতে পারে। < mathforum.org/library/drmath/view/68373.html >
জন

1
এটি কি গোলকের / গোলকের মধ্যে থাকা দরকার, বা পরিকল্পনাকারী অ্যালগরিদম ঠিক আছে?
fmark

1
আমি আপনাকে উত্তরটি দিতে পারব না, তবে আমি মনে করি আমি আপনাকে সঠিক দিকে নির্দেশ করতে পারি। তিনটি স্থানাঙ্ক = তিনটি কেন্দ্র পয়েন্ট। তিনটি দূরত্ব = তিনটি বৃত্ত। দুটি চেনাশোনা যেগুলি ছেদ করে, তাদের কোনও / এক / দুটি সমাধানের সম্ভাবনা থাকতে পারে। তিনটি চেনাশোনাতে এর সমাধান হিসাবে কোনও / একটি / বা কোনও অঞ্চল থাকতে পারে না। তিনটি চেনাশোনাগুলির জন্য বৃত্ত সূত্রটি পান এবং এটি সমীকরণ / বীজগণিতের সিস্টেমগুলির সাথে সমাধান করুন।
ক্রেজিইনিগমা

আসলে, এটিকে সমাধান করার জন্য আপনার এমনকি সিস্টেমেরও দরকার নেই। একটি বা দুটি সম্ভাবনা রয়েছে তবে আপনার দূরত্বের মান হওয়ায় আপনি সঠিক উত্তরটি আলাদা করতে পারবেন।
জর্জ সিলভা

1
+1 এটি একটি ভাল প্রশ্ন। প্রথমে আমি ভেবেছিলাম গুগলের সাথে একটি সমাধান সহজেই পাওয়া যাবে, তবে আপাতদৃষ্টিতে তা পাওয়া যায় নি। সম্ভবত সমস্যাটি আরও সাধারণভাবে বলা যেতে পারে: প্রদত্ত এন পয়েন্টগুলি প্রতিটি পয়েন্টের সাথে কেবল একটি দূরত্ব নয়, ত্রুটির একটি প্রান্তও রয়েছে, আত্মবিশ্বাসের উপবৃত্তটি সন্ধান করুন।
কर्क কুইকেনডাল

উত্তর:


34

স্ট্যাকওভারফ্লোতে উইকিপিডিয়া এবং একই প্রশ্ন / উত্তর সম্পর্কে কিছুটা দেখার পরে , আমি বুঝতে পেরেছিলাম যে আমি এটির জন্য একটি ছুরিকাঘাত করব এবং শূন্যস্থানগুলি পূরণ করার চেষ্টা করব।

প্রথমে, আপনি আউটপুটটি কোথায় পেয়েছেন তা নিশ্চিত নন তবে এটি ভুল বলে মনে হচ্ছে। আমি আর্কম্যাপে পয়েন্টগুলি প্লট করেছি, সেগুলি নির্দিষ্ট দূরত্বে বাফার করেছি, বাফারগুলিতে ছেদ করে ছুটি পেয়েছি এবং এরপরে সমাধানগুলি পেতে ছেদটির শীর্ষটি ধরে নিয়েছি। আপনার প্রস্তাবিত আউটপুট সবুজ পয়েন্ট। আমি কলআউট বাক্সে মানটি গণনা করেছি, যা ছেদ থেকে প্রাপ্ত সমাধানের জন্য আর্কম্যাপ যা দিয়েছে তার প্রায় 3 মিটার।

বিকল্প পাঠ

উইকিপিডিয়া পৃষ্ঠায় গণিত খুব খারাপ নয়, কেবল আপনার জিওডেটিক স্থানাঙ্কগুলি কার্টেসিয়ান ECEF- এ গোপন করতে হবে, যা এখানে পাওয়া যাবে । যদি আপনি এলিপসয়েড ব্যবহার না করে থাকেন তবে একটি / এক্স + এইচ শর্তাদি অটলিক গোলক ব্যাসার্ধ দ্বারা প্রতিস্থাপিত হতে পারে।

সম্ভবত সবচেয়ে সহজ কেবল আপনাকে কিছু ভাল (?) নথিবদ্ধ কোড দিন, সুতরাং এখানে এটি অজগর

import math
import numpy

#assuming elevation = 0
earthR = 6371
LatA = 37.418436
LonA = -121.963477
DistA = 0.265710701754
LatB = 37.417243
LonB = -121.961889
DistB = 0.234592423446
LatC = 37.418692
LonC = -121.960194
DistC = 0.0548954278262

#using authalic sphere
#if using an ellipsoid this step is slightly different
#Convert geodetic Lat/Long to ECEF xyz
#   1. Convert Lat/Long to radians
#   2. Convert Lat/Long(radians) to ECEF
xA = earthR *(math.cos(math.radians(LatA)) * math.cos(math.radians(LonA)))
yA = earthR *(math.cos(math.radians(LatA)) * math.sin(math.radians(LonA)))
zA = earthR *(math.sin(math.radians(LatA)))

xB = earthR *(math.cos(math.radians(LatB)) * math.cos(math.radians(LonB)))
yB = earthR *(math.cos(math.radians(LatB)) * math.sin(math.radians(LonB)))
zB = earthR *(math.sin(math.radians(LatB)))

xC = earthR *(math.cos(math.radians(LatC)) * math.cos(math.radians(LonC)))
yC = earthR *(math.cos(math.radians(LatC)) * math.sin(math.radians(LonC)))
zC = earthR *(math.sin(math.radians(LatC)))

P1 = numpy.array([xA, yA, zA])
P2 = numpy.array([xB, yB, zB])
P3 = numpy.array([xC, yC, zC])

#from wikipedia
#transform to get circle 1 at origin
#transform to get circle 2 on x axis
ex = (P2 - P1)/(numpy.linalg.norm(P2 - P1))
i = numpy.dot(ex, P3 - P1)
ey = (P3 - P1 - i*ex)/(numpy.linalg.norm(P3 - P1 - i*ex))
ez = numpy.cross(ex,ey)
d = numpy.linalg.norm(P2 - P1)
j = numpy.dot(ey, P3 - P1)

#from wikipedia
#plug and chug using above values
x = (pow(DistA,2) - pow(DistB,2) + pow(d,2))/(2*d)
y = ((pow(DistA,2) - pow(DistC,2) + pow(i,2) + pow(j,2))/(2*j)) - ((i/j)*x)

# only one case shown here
z = numpy.sqrt(pow(DistA,2) - pow(x,2) - pow(y,2))

#triPt is an array with ECEF x,y,z of trilateration point
triPt = P1 + x*ex + y*ey + z*ez

#convert back to lat/long from ECEF
#convert to degrees
lat = math.degrees(math.asin(triPt[2] / earthR))
lon = math.degrees(math.atan2(triPt[1],triPt[0]))

print lat, lon

1
আমি একই অনুরূপ উত্তর এক সাথে রাখতে যাচ্ছিলাম, কিন্তু এখন আর প্রয়োজন নেই! আমার উপন্যাস পায়।
বিরক্ত

উদ্ধার! এটি যখন 'ট্রিপিট' 'ট্রাইল্যাটপিটি'র সাথে প্রতিস্থাপিত হয় তখন এটি সংকলন করে, তবে অন্যথায় 37.4191023738 -121.960579208 প্রদান করে না। ভাল কাজ
ওল্ফআড্রেড

ভাল কাজ! যদি আমি ভৌগলিক স্থানাঙ্ক সিস্টেমকে স্থানীয় [কার্তেসিয়ান] স্থানাঙ্ক ব্যবস্থায় প্রতিস্থাপন করি, তবে কি এটি এখনও কার্যকর হবে?
zengr

সি ++ ডোমেনে তাদের জন্য..এই বাস্তব দ্রুত এক পেস্টবিন.
রাজ

2
ধন্যবাদ @ www.nick! আমি এটি জাভাস্ক্রিপ্টে পোর্ট করেছি (নোডের উদ্দেশ্যে তৈরি তবে ব্রাউজারে সহজেই কাজে রূপান্তর করা যায়)। gist.github.com/dav-/bb7103008cdf9359887f
ডিসি_

6

আমি নির্দোষ হয়ে উঠছি কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে, আপনি যদি প্রতিটি বিন্দু আকার দিয়ে বাফার করেন, এবং তারপর তিনটি চেনাশোনা ছেদ করেন যা আপনাকে সঠিক অবস্থানটি পেতে পারে?

আপনি স্থানিক API গুলি ব্যবহার করে ছেদটি গণনা করতে পারেন। উদাহরণ:

  • GeoScript
  • জাভা টপোলজি স্যুট
  • নেট টপোলজি স্যুট
  • GEOS

1
ঠিক ঠিক, সেই ছেদ পয়েন্টটি পেতে তিনি সূত্রগুলিতে আগ্রহী।
ভিঙ্কো ভার্সালভিক

একটি স্থানিক API ব্যবহার করে আপনি খাঁটি গণিত ব্যবহার না করে এটি করতে পারেন can
জর্জ সিলভা

1
@ জর্জ আপনি কি এই জাতীয় এপিআইয়ের উদাহরণ দিতে পারেন?
অপরাহ্ন

নোহাতের অনুরোধ প্রতিবিম্বিত করতে সম্পাদিত পোস্ট।
জর্জ সিলভা

+1, ভাল পার্শ্বীয় চিন্তাভাবনা, এমনকি সম্ভবত সবচেয়ে কম্পিউটেশনাল দক্ষ না হলেও!
fmark

2

নিম্নলিখিত নোটগুলি প্ল্যানারিথমিক জ্যামিতি ব্যবহার করে (যেমন আপনাকে আপনার স্থানাঙ্কগুলি একটি উপযুক্ত স্থানীয় স্থানাঙ্ক সিস্টেমে প্রজেক্ট করতে হবে)।

পাইথনের একটি কাজের উদাহরণ সহ আমার যুক্তিগুলি নিম্নলিখিত:

ডেটা-পয়েন্টগুলির মধ্যে 2 নিন (তাদের কল করুন aএবং b)। আমাদের টার্গেট পয়েন্ট কল করুন x। আমরা ইতিমধ্যে দূরত্ব জানি axএবং bxabপাইথাগোরাসগুলির উপপাদ্যটি ব্যবহার করে আমরা দূরত্ব গণনা করতে পারি ।

>>> import math
>>> a = (1, 4)
>>> b = (3, 6)
>>> dist_ax = 3
>>> dist_bx = 5.385
# Pythagoras's theorem
>>> dist_ab = math.sqrt(abs(a[0]-b[0])**2 + abs(a[1]-b[1])**2)
>>> dist_ab
2.8284271247461903

এখন, আপনি এই লাইনের কোণগুলি তৈরি করতে পারেন:

>>> angle_abx = math.acos((dist_bx * dist_bx + dist_ab * dist_ab - dist_ax * dist_ax)/(2 * dist_bx * dist_ab))
>>> math.degrees(angle_abx)
23.202973815040256
>>> angle_bax = math.acos((dist_ax * dist_ax + dist_ab * dist_ab - dist_bx * dist_bx)/(2 * dist_ax * dist_ab))
>>> math.degrees(angle_bax)
134.9915256259537
>>> angle_axb = math.acos((dist_ax * dist_ax + dist_bx * dist_bx - dist_ab * dist_ab)/(2 * dist_ax * dist_bx))
>>> math.degrees(angle_axb)
21.805500559006095

দুর্ভাগ্যক্রমে আমি আপনার জন্য উত্তরটি সম্পূর্ণ করতে খুব অল্প সময়েই যাইহোক, এখন আপনি কোণগুলি জানেন তবে আপনি দুটি সম্ভাব্য অবস্থানের জন্য গণনা করতে পারেন x। তারপরে, তৃতীয় পয়েন্ট সি ব্যবহার করে আপনি গণনা করতে পারবেন কোন অবস্থানটি সঠিক।


2

এটি কাজ করতে পারে। দ্রুত আবার অজগরতে, আপনি এটি একটি ফাংশন xN, yN = পয়েন্টের স্থানাঙ্ক, r1 এবং r2 = ব্যাসার্ধের মানগুলিতে রেখে দিতে পারেন

dX = x2 - x1
dY = y2 - y1

centroidDistance = math.sqrt(math.pow(e,2) + math.pow(dY,2)) #distance from centroids
distancePL = (math.pow(centroidDistance,2) + (math.pow(r1,2) - math.pow(r2,2))) / (2 * centroidDistance) #distance from point to a line splitting the two centroids

rx1 = x1 + (dX *k)/centroidDistance + (dY/centroidDistance) * math.sqrt(math.pow(r1,2) - math.pow(distancePL,2))
ry1 = y1 + (dY*k)/centroidDistance - (dX /centroidDistance) * math.sqrt(math.pow(r1,2) - math.pow(distancePL,2))

rx2 = x1 + (dX *k)/centroidDistance - (dY/centroidDistance) * math.sqrt(math.pow(r1,2) - math.pow(distancePL,2))
ry2 = y1 + (dY*k)/centroidDistance + (dX /centroidDistance) * math.sqrt(math.pow(r1,2) - math.pow(distancePL,2))

rx & ry মানগুলি কোনও বৃত্তের দুটি ছেদ পয়েন্টের রিটার্ন মান (একটি অ্যারেতে হওয়া উচিত), যদি এটি বিষয়গুলিকে স্পষ্ট করতে সহায়তা করে।

প্রথম 2 টি চেনাশোনাগুলির জন্য এটি করুন, তারপরে আবার প্রথম এবং শেষের জন্য। প্রথম পুনরাবৃত্তির ফলাফলগুলির মধ্যে যদি দ্বিতীয়টির ফলাফলগুলির সাথে তুলনা করা হয় (কিছুটা সহনশীলতার মধ্যে রয়েছে সম্ভবত) তবে আপনার ছেদ বিন্দু রয়েছে। এটি কোনও দুর্দান্ত সমাধান নয় বিশেষত যখন আপনি প্রক্রিয়াটিতে পয়েন্টের চেয়ে বেশি যোগ করতে শুরু করেন তবে সমীকরণের কোনও সিস্টেম সমাধান না করেই আমি দেখতে পাই সবচেয়ে সহজ।


আপনার কোডে 'ই' এবং 'কে' কী আছে?
ReinierDG

আমার মনে নেই :-) ডাব্লুউনিকের উত্তরটি এমন কিছু লাইনের সাথে আরও বেশি যা আপনি প্রয়োগ করতে চান আপনার যদি কেবল তিনটি চেনাশোনা থাকে।
ওল্ফঅড্রেড

1

আপনি পোস্টগিস থেকে স্টেটিয়াল এপিআই ব্যবহার করতে পারেন (St_Intersication, St_buffer ফাংশন)। যেমনটি ফার্ক লক্ষ্য করেছে, আপনাকে অবশ্যই মনে রাখতে হবে যে পোস্টগিস প্ল্যানার অ্যালগোরিদম ব্যবহার করে তবে ছোট অঞ্চলে সমান-দূরবর্তী প্রজেকশন ব্যবহার করে খুব বেশি ত্রুটি প্রবর্তিত হয় না।


পোস্টজিআইএস GEOGRAPHYটাইপের পরিবর্তে টাইপ ব্যবহার করে স্পেরোডিয়াল গণনা করতে পারে GEOMETRY
fmark

1

এটি পিএইচপি ভাষায় করুন:

// অনুমানের উচ্চতা = 0
$ আর্থআর = 6371; // কিমি ইন (= 3959 মাইল)

$ লতা = 37.418436;
On লোনা = -121.963477;
$ ডিস্টা = 0.265710701754;

$ ল্যাটবি = 37.417243;
On লোনবি = -121.961889;
$ ডিস্টবি = 0.234592423446;

$ ল্যাটিক = 37.418692;
On লোনসি = -121.960194;
$ ডিস্টিসি = 0.0548954278262;

/ *
অটলিক গোলক ব্যবহার করে #
# যদি একটি এলিপসয়েড ব্যবহার করে এই পদক্ষেপটি কিছুটা আলাদা
# রূপান্তর জিওডেটিক ল্যাট / লং টু ইসিইএফ xyz এ
# 1. ল্যাট / দীর্ঘকে রেডিয়ানে রূপান্তর করুন
# 2. ল্যাট / লং (রেডিয়ানস) কে ইসিএফ এ রূপান্তর করুন
* /
$ xA = $ আর্থআর * (কোস (ডিগ 2 ব্রাড ($ লতা)) * কোস (ডিগ 2 ব্রড ($ লোনা)));
$ yA = $ আর্থআর * (কোস (ডিগ 2 ব্রড ($ লতা)) * পাপ (ডিগ 2 ব্রড ($ লোনা)));
$ zA = $ আর্থআর * (পাপ (ডিগ 2 ব্রড ($ লতা)));

$ xB = $ আর্থআর * (কোস (ডিগ 2 ব্রড ($ ল্যাটবি)) * কোস (ডিগ 2 ব্রড (on লোনবি));
$ yB = $ আর্থআর * (কোস (ডিগ 2 ব্রড ($ ল্যাটবি)) * পাপ (ডিগ 2 ব্রড ($ লোনবি)));
$ zB = $ আর্থআর * (পাপ (ডিগ 2 ব্রড ($ ল্যাটবি)));

$ এক্সসি = $ আর্থআর * (কোস (ডিগ্রিড্রেড ($ ল্যাটসি)) * কোস (ডিগ্রিড্রেড (on লোনসি)));
$ ওয়াইসি = $ আর্থআর * (কোস (ডিগ 2 ব্রড ($ ল্যাটসি)) * পাপ (ডিগ 2 ব্রড (on লোনসি)));
$ zC = $ আর্থআর * (পাপ (ডিগ 2 ব্রড ($ ল্যাটসি)));

/ *
ইনস্টল করুন:
sudo নাশপাতি ইনস্টল করুন ম্যাথ_ভেক্টর -০.০.০
সুডো পিয়ার ইনস্টল করুন ম্যাথ_ম্যাট্রিক্স -০.০..7
* /
// পিয়ার অন্তর্ভুক্ত করুন :: ম্যাথ_ম্যাট্রিক্স
// /usr/share/php/Math/Matrix.php
// অন্তর্ভুক্ত_পথ = "।: / ইউএসআর / স্থানীয় / পিএইচপি / পিয়ার /"
প্রযোজনা_অনস 'ম্যাথ / ম্যাট্রিক্স.এফপি';
need_once 'ম্যাথ / ভেক্টর.এফপি';
need_once 'ম্যাথ / ভেক্টর 3.এফপি';


$ P1vector = নতুন ম্যাথ_ভেক্টর 3 (অ্যারে ($ xA, $ yA, $ zA));
$ P2vector = নতুন ম্যাথ_ভেক্টর 3 (অ্যারে ($ xB, $ yB, $ zB));
$ P3vector = নতুন ম্যাথ_ভেক্টর 3 (অ্যারে ($ xC, $ yC, $ zC));

# উইকিপিডিয়া থেকে: http://en.wikedia.org/wiki/Trilateration
# প্রথম দিকে বৃত্ত পেতে ট্রান্সফর্ম
এক্স অক্ষের উপর 2 বৃত্ত পেতে ট্রান্সফর্ম

// CALC প্রাক্তন
$ P2minusP1 = ম্যাথ_ভেক্টরঅপ :: স্তর ($ P2vector, $ P1vector);
$ l = নতুন ম্যাথ_ভেক্টর ($ পি 2মিনাসপি 1);
$ P2minusP1_ দৈর্ঘ্য = $ l-> দৈর্ঘ্য ();
$ আদর্শ = নতুন ম্যাথ_ভেক্টর 3 (অ্যারে ($ P2minusP1_ দৈর্ঘ্য, $ P2minusP1_ দৈর্ঘ্য, $ P2minusP1_ দৈর্ঘ্য));
$ d = $ আদর্শ; // সেভ ক্যালক ডি
$ প্রাক্তন = ম্যাথ_ভেক্টরপ :: বিভাজন ($ P2minusP1, $ আদর্শ);
// প্রতিধ্বনি "প্রাক্তন:"। $ প্রাক্তন>> স্ট্রিং () "" \ n ";
$ প্রাক্তন_এক্স = ফ্লোটওয়াল ($ প্রাক্তন -> _ টিপল-> গেটডাটা () [0]);
$ ex_y = ভাসমান ($ প্রাক্তন -> _ টিপল-> getData () [1]);
$ ex_z = ফ্লোটওয়াল ($ প্রাক্তন -> _ টিপল-> গেটডাটা () [2]);
$ প্রাক্তন = নতুন ম্যাথ_ভেক্টর 3 (অ্যারে ($ প্রাক্তন_এক্স, $ প্রাক্তন_, $ প্রস্থান_জ));

// সিএএলসি i
$ P3minusP1 = ম্যাথ_ভেক্টরঅপ :: স্তর ($ P3vector, $ P1vector);
$ P3minusP1_x = ফ্লোটওয়াল ($ P3minusP1 -> _ tuple-> getData () [0]);
$ P3minusP1_y = ভাসমান ($ P3minusP1 -> _ tuple-> getData () [1]);
$ P3minusP1_z = ফ্লোটওয়াল ($ P3minusP1 -> _ টিপল-> getData () [2]);
$ P3minusP1 = নতুন ম্যাথ_ভেক্টর 3 (অ্যারে ($ P3minusP1_x, $ P3minusP1_y, $ P3minusP1_z));
$ i = ম্যাথ_ভেক্টরপ :: ডটপ্রোডাক্ট ($ প্রাক্তন, $ পি 3 মিনাসপি 1);
// প্রতিধ্বনি "i = $ i \ n";

// CALC EY
$ iex = ম্যাথ_ভেক্টরঅ্যাপ :: স্কেল ($ i, $ প্রাক্তন);
// প্রতিধ্বনি "iex ="। $ iex-> টু স্ট্রিং () "" \ n ";
$ P3P1iex = ম্যাথ_ভেক্টরঅ্যাপ :: স্তর ($ P3minusP1, $ iex);
// প্রতিধ্বনি "P3P1iex ="। $ P3P1iex-> toString ()। "\ n";
$ l = নতুন ম্যাথ_ভেক্টর ($ P3P1iex);
$ P3P1iex_leight = $ l-> দৈর্ঘ্য ();
$ আদর্শ = নতুন ম্যাথ_ভেক্টর 3 (অ্যারে ($ P3P1iex_ দৈর্ঘ্য, $ P3P1iex_ দৈর্ঘ্য, $ P3P1iex_ দৈর্ঘ্য));
// প্রতিধ্বনি "আদর্শ:"। $ নর্ম-> টু স্ট্রিং () "" \ n ";
y ey = ম্যাথ_ভেক্টরপ :: বিভাজন ($ P3P1iex, $ আদর্শ);
// প্রতিধ্বনি "ey ="। $ ey-> টু স্ট্রিং () "" \ n ";
y ey_x = ফ্লোটওয়াল ($ ey -> _ tuple-> getData () [0]);
y ey_y = ভাসমান ($ ey -> _ tuple-> getData () [1]);
y ey_z = ভাসমান ($ ey -> _ tuple-> getData () [2]);
$ ey = নতুন ম্যাথ_ভেক্টর 3 (অ্যারে ($ ey_x, $ ey_y, $ ey_z));

// সিএএলসি ইজেড
z ইজ = ম্যাথ_ভেক্টরঅপ :: ক্রসপ্রডাক্ট ($ প্রাক্তন, $ ey);
// প্রতিধ্বনি "ez ="। $ ez-> টু স্ট্রিং () "" \ n ";

// সিএএলসি ডি
// আগে এটি করুন
$ d = ভাসমান ($ d -> _ tuple-> getData () [0]);
// প্রতিধ্বনি "d = $ d \ n";

// সিএলসি জে
$ জে = ম্যাথ_ভেক্টরঅপ :: ডটপ্রোডাক্ট ($ ey, $ P3minusP1);
// প্রতিধ্বনি "j = $ j \ n";

উইকিপিডিয়া থেকে
# প্লাগ এবং উপরের মানগুলি ব্যবহার করে চ্যাগ করুন
$ x = (পাও ($ ডিস্টা, 2) - পাও ($ ডিস্টবি, 2) + পাও ($ ডি, 2)) / (2 * $ ডি);
$ y = ((পাও ($ ডিস্টা, 2) - পাউ ($ ডিস্টিসি, 2) + পাউ ($ i, 2) + পাউ ($ জে, 2)) / (2 * $ জে)) - (($ i / $ ঞ) * $ x এর);

# এখানে কেবল একটি কেস দেখানো হয়েছে
$ z = স্কয়ার্ট (পাও ($ ডিস্টা, 2) - পাও ($ x, 2) - পাও ($ y, 2));

// প্রতিধ্বনি "x = $ x - y = $ y - z = $ z \ n";

#triPt হ'ল ESEF x, y, z এর সাথে ত্রিবিধ্বন পয়েন্টের একটি অ্যারে
$ xex = ম্যাথ_ভেক্টরপ :: স্কেল ($ x, $ প্রাক্তন);
$ ইয়ে = ম্যাথ_ভেক্টরঅ্যাপ :: স্কেল ($ y, y ey);
$ জেজ = ম্যাথ_ভেক্টরঅ্যাপ :: স্কেল ($ z, $ ez);

// CALC $ triPt = $ P1vector + $ xex + $ ইয়ে + $ জেজ;
$ ট্রিপটি = ম্যাথ_ভেক্টরঅ্যাপ :: অ্যাড ($ পি 1 ভেক্টর, $ এক্সেক্স);
$ ট্রিপটি = ম্যাথ_ভেক্টরঅ্যাপ :: অ্যাড ($ ট্রিপটি, $ ইয়ে);
$ ট্রিপটি = ম্যাথ_ভেক্টরপ :: যোগ করুন ($ ট্রিপটি, $ জেজ);
// প্রতিধ্বনি "triPt ="। $ ট্রিপট-> টু স্ট্রিং () "" \ n ";
$ ট্রিপটি_এক্স = ফ্লোটওয়াল ($ ট্রিপটি -> _ টিপল-> গেটডাটা () [0]);
$ ট্রিপটি_ই = ফ্লোটওয়াল ($ ট্রিপটি -> _ টিপল-> গেটডাটা () [1]);
$ ট্রিপটি_জ = ফ্লোটওয়াল ($ ট্রিপটি -> _ টিপল-> গেটডাটা () [2]);


# ECEF থেকে ল্যাট / লম্বায় ফিরে আসুন
# ডিগ্রীতে রূপান্তর করুন
$ ল্যাট = র‌্যাড 2 ডেগ (আসিন ($ ট্রিপটি_জেড / $ আর্থআর));
$ দীর্ঘ = Rad2deg (atan2 ($ triPt_y, $ triPt_x));

প্রতিধ্বনি $ lat। ','। Lon $;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.