আপনি যে কোনও সময় তীরের কোণটি চান। আপনি মনে রেখেছেন যে একটি কোণ গণনা করার জন্য, একটি স্পর্শক রয়েছে। তবে এখানে আপনার ভাবনাটি ভুল হতে শুরু করেছে:
- আপনি যা চান তা ডেল্টা ওয়াই / ডেল্টা এক্স, কারণ theাল হ'ল পরিবর্তনের হার (অন্য উত্তরের একটিতে উল্লিখিত)। নোট করুন যে x ঠিক সেই অবস্থান যেখানে আপনি সময়ে যে কোনও মুহুর্তে রয়েছেন, ডেক্স নয়।
ঠিক আছে, সুতরাং যদি আপনি বায়ুর ঘর্ষণকে অবহেলা করেন তবে তীরটির এক্স-বেগ একটি ধ্রুবক।
প্রথমে এক্স এবং ওয়াই উপাদানগুলিতে বেগটি পচন করুন। আপনি 45 ডিগ্রি বা 60 ডিগ্রি কোণে শুটিং করতে পারেন। সুতরাং আপনার লঞ্চভেলোসিটি এবং একটি কোণ দরকার, এটি কোনও স্কেলার নয়।
দ্বিতীয়ত, ভাসমান নয়, সবকিছুকে দ্বিগুণ হিসাবে গণনা করুন। রাউন্ডঅফ ত্রুটি কখন আপনাকে মেরে ফেলবে না তা জানতে আপনি সংখ্যাসূচকভাবে পরিশীলিত নন, তাই চেষ্টা করবেন না। এটি কোনও ক্ষেত্রেই দুর্দান্ত সময় রক্ষাকারী নয়।
তৃতীয়ত, ম্যাথ.পাউ ব্যবহার করবেন না, এটি ধীর এবং পূর্ণসংখ্যার শক্তির জন্য গুণনের মতো সঠিক নয়। এছাড়াও আপনি হর্নারের ফর্মটি ব্যবহার করে প্রচুর সময় বাঁচাতে পারেন (নীচে দেখুন)
final double DEG2RAD = Math.PI/180;
double ang = launchAngle * DEG2RAD;
double v0x = launchVelocity * cos(ang); // initial velocity in x
double v0y = launchVelocity * sin(ang); // initial velocity in y
double x = (v0x * time);
// double y = (v0y * time) + (0.5 * g * (float)Math.Pow(time, 2));
double y = (0.5 * g * time + v0y) * time
আপনি যদি পারফরম্যান্সের জন্য মরিয়া হয়ে থাকেন তবে আপনি ০.০ * জি প্রাক্টমুটও করতে পারেন তবে উপরের কোডটি আপনাকে খুব বেশি পাগল না করে 90% পথ নিয়ে যাবে। আপনার পছন্দ মতো বেঞ্চমার্ক এই ১০ মিলিয়ন বার করছে, এটি স্বীকার করা যে এটি প্রচুর পরিমাণে সময় নয় তবে শতাংশের ভিত্তিতে এটি বেশ বড় - লাইব্রেরিগুলি জাভাতে খুব ধীর
সুতরাং, আপনি যদি তীরটি কোথায় যেতে চান এমন কোণটি চান তবে আপনি যা চান তা চান
atan(dy/dx)
এবং এই ক্ষেত্রে, এটি কাজ করবে কারণ ডেক্স একটি ধ্রুবক। তবে সাধারণভাবে, ডিএক্স শূন্য হতে পারে, তাই আপনি সাধারণত ব্যবহার করতে চান:
atan2(dy, dx)
যা বিশেষ করে এই কাজের জন্য ডিজাইন করা একটি ফাংশন।
তবে আমি যেমন বলেছি, জাভাতে পাঠাগার ফাংশনগুলি আস্তে আস্তে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে যায় এবং উপরে এফএক্সআইআইআই এর উপর নির্ভর না করে এটি করার আরও ভাল উপায় আছে।
যদি অনুভূমিক বেগ সর্বদা v0x হয়, এবং উল্লম্ব বেগ হয়:
double vy = v0y - 0.5 * g * time;
তারপরে আপনার ব-দ্বীপটি হ'ল: vx, vy
আপনার কোণ দরকার নেই। আপনি যদি একটি তীর আঁকতে চান তবে নামমাত্র এমন কিছু ব্যবহার করুন:
প্লট (x, y, x + vx, y + vy);
আপনি কী আঁকছেন তা আমি জানি না, সুতরাং এটিকে ঘোরানোর জন্য আপনার যদি কোণ দরকার হয় (যেমন আপনি JOGL ব্যবহার করছেন) তবে অবশ্যই, কোণটি ব্যবহার করুন।
কোণটি আবার ডিগ্রীতে পরিণত করতে আপনি ওপেনগল ব্যবহার করছেন কিনা তা ভুলে যাবেন না, কারণ এটিএন 2 রেডিয়ানগুলি ফেরত দেয়:
final double RAD2DEG = 180 / Math.PI;
double ang = Math.atan2(vy,vx); // don't forget, vy first!!!
double deg = ang * RAD2DEG;