برای مشاهده روند ساخت پروژه ها و محصولات به کانال تلگرام ما بپیوندید           
  خانه محصولات دانلود پروژه ها بحث و گفتگو وبلاگ آموزشها و مقالات تماس با ما  

  فروم khazama.com --> زبانهای برنامه نویسی --> کمک !!!!!!!!!!!

  چهارشنبه 17 مهر 87 , 11:39 PM


کاربر
syhzgh
تعداد پستها : 10
کمک !!!!!!!!!!!

سلام آقا بهزاد
من به این فرمول توی این برنامه نیاز دارم ولی از جاوا سر در نمیارم(محاسبه ی فاصله از روی طول وعرض جغرافیایی). اگه فرمول یا برنامه به زبان سی رو ....لطفا!
ضمنا با توابع مثلثاتی(کدویژن) مشکل دارم. نمیدونید دقتشون تا چند رقم اعشاره؟ چون من هر کاری میکنم فاصله های زیر ۲کیلومتر رو صفر نشون میده!یعنی دقت ۲کیلومتر!! هر ده هزارم رادیان توی این زوایایی که سینوس یا کسینوس باید حساب کنه یا زاویه ای که آرک کسینوس یا آرک تانژانت باید بده مهمه. ولی میکرو گردش میکنه!!! یعنی میکرو توی این پروژه با دمپایی فرق نداره یا من فسفرم کم شده؟!؟!؟!؟!     لطفا کمکم کنید ممنون.


  چهارشنبه 17 مهر 87 , 11:42 PM


کاربر
syhzgh
تعداد پستها : 10
/*
* Calculate destination point given start point lat/long (numeric degrees),
* bearing (numeric degrees) & distance (in m).
*
* from: Vincenty direct formula - T Vincenty, "Direct and Inverse Solutions of Geodesics on the
* Ellipsoid with application of nested equations", Survey Review, vol XXII no 176, 1975
* http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf
*/
function destVincenty(lat1, lon1, brng, dist) {
var a = 6378137, b = 6356752.3142, f = 1/298.257223563; // WGS-84 ellipsiod
var s = dist;
var alpha1 = brng.toRad();
var sinAlpha1 = Math.sin(alpha1), cosAlpha1 = Math.cos(alpha1);

var tanU1 = (1-f) * Math.tan(lat1.toRad());
var cosU1 = 1 / Math.sqrt((1 + tanU1*tanU1)), sinU1 = tanU1*cosU1;
var sigma1 = Math.atan2(tanU1, cosAlpha1);
var sinAlpha = cosU1 * sinAlpha1;
var cosSqAlpha = 1 - sinAlpha*sinAlpha;
var uSq = cosSqAlpha * (a*a - b*b) / (b*b);
var A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));
var B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq)));

var sigma = s / (b*A), sigmaP = 2*Math.PI;
while (Math.abs(sigma-sigmaP) > 1e-12) {
var cos2SigmaM = Math.cos(2*sigma1 + sigma);
var sinSigma = Math.sin(sigma), cosSigma = Math.cos(sigma);
var deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)-
B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));
sigmaP = sigma;
sigma = s / (b*A) + deltaSigma;
}

var tmp = sinU1*sinSigma - cosU1*cosSigma*cosAlpha1;
var lat2 = Math.atan2(sinU1*cosSigma + cosU1*sinSigma*cosAlpha1,
(1-f)*Math.sqrt(sinAlpha*sinAlpha + tmp*tmp));
var lambda = Math.atan2(sinSigma*sinAlpha1, cosU1*cosSigma - sinU1*sinSigma*cosAlpha1);
var C = f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha));
var L = lambda - (1-C) * f * sinAlpha *
(sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)));

var revAz = Math.atan2(sinAlpha, -tmp); // final bearing

return new LatLon(lat2.toDeg(), lon1+L.toDeg());
}


**  آخرین ویرایش در  پنج‌شنبه 9 آبان 87 - 9:45 AM

  چهارشنبه 17 مهر 87 , 11:46 PM


کاربر
syhzgh
تعداد پستها : 10

bebakhshid!!!!!!!!!!!!!!!!!!!!!!


http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html


  پنج‌شنبه 9 آبان 87 , 9:44 AM


مدیر سایت
behzad
تعداد پستها : 905

درود
در مورد کدی که نوشتید که والا خوندن و سر در آوردن ازش یکمی زیادی طول میکشه و الان فرصتی نیست ولی کدویژن میتونه محاسبات با این دقت رو انجام بده فکر میکنم شما توی تعریف متغیرها یا کلا تبدیلاتی که در حین محاسبات دارید جایی تبدیل انواع متغیرها (Type Casting) رو در تظر نگرفتید.
البته جاوا کلا خیلی توابع ریاضی داره که البته با همین توابع استاندارد قابل ساخت هست فقط باید ببینید چه کاری انجام میده و همون رو با توابع استاندارد ریاضی کدویژن ایجاد کنید.

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  شنبه 11 آبان 87 , 11:13 PM


کاربر
syhzgh
تعداد پستها : 10
بلههههههههههههههههه

سلام. بله.دقیقا. مشکل همین بود type casting!!!!


خیلی خیلی ممنون.


  صفحه : [1]    
 
 


Designer And Programmer : Behzad khazama
Coded With ASP.NET
تمامي حقوق مادي و معنوي مطالب متعلق به اين سايت ميباشد .
هر گونه استفاده از مطالب اين سايت تنها با ذکر منبع بلامانع ميباشد
.
www.khazama.com
Tel : 051-44641597 - 09363677001 - 09155714862
Support SMS Center: 09363677100