দ্বিগুণ (বা লম্বা) ব্যবহার করে সৌরজগতকে 3 ডি স্পেসে সঠিকভাবে উপস্থাপন করা যেতে পারে?


15

আমি কীভাবে একটি 3D গেমের সর্বাধিক স্থানাঙ্ক পরিচালনা করতে পারি, যার লক্ষ্য পুরো সৌরজগতকে বাস্তবিকভাবে মডেল করা, তবুও একটি "জাহাজ" এর মধ্যে ক্ষুদ্রতম গতিবিধি পরিচালনা করতে সক্ষম হতে হবে (যেমন: সম্ভবত আমরা 1 সেমিটিকে সবচেয়ে ছোট হিসাবে বিবেচনা করতে পারি) একটি ফ্রেমের জন্য গ্রহণযোগ্য আন্দোলন)। -৪-বিট ডাবলস (বা 64৪-বিট লম্বা) কি এটি সমর্থন করে, বা আমরা কি ওভারফ্লো সমস্যার মধ্যে চলে যাব? যদি তা না হয় তবে লম্বা বা দ্বিগুণ ব্যবহার করা উচিত, বা যদি তাই হয় তবে আপনার মনে হয় কোন 3 ডি গেমের ক্ষেত্রে সৌরজগতের মডেলিং পজিশনের জন্য সবচেয়ে বিকল্প কোন ধারণাটি মনে হয়? (উদাহরণস্বরূপ: শিপিংয়ের দূরত্বের উপর ভিত্তি করে ডিসপ্লেতে কেবলমাত্র কিছুটা সিস্টেম রাখা, বা কোনও পদ্ধতিতে কোনও ভিন্ন সমন্বয় স্থানে প্রতিনিধিত্ব করা ইত্যাদি)


আপনি কোন ভাষাটিকে টার্গেট করছেন: সি / সি ++? জাভা? অন্যকিছু?
লরেন্ট কুইভিডু

4
@ লরানকৌ: অপ্রাসঙ্গিক, তিনি স্পষ্টভাবে এর আকার নির্দিষ্ট করেছেন long
ডেড এমএমজি

@ ডিডএমজি যা সি / সি ++ এ 32-বিট হতে পারে। -৪-বিট একটি বেশি long long। তবে হ্যাঁ, যাই হোক না কেন, চাইলে নিটপিকিং করুন।
লরেন্ট কুইভিডু

স্রেফ বিগইন্টিজার ব্যবহার করুন। বেশিরভাগ ভাষায় এর কিছু বৈকল্পিক রয়েছে - সীমাহীন আকারের পূর্ণসংখ্যার মান (ব্যবহার হ'ল (লগ (এন)))
ashes999

এটি একটি উত্তর হতে পারে তবে শর্ত দেওয়া যে গেমটি কম্পিউটিংয়ে খুব বেশি ভারী না।
লরেন্ট কুইভিডু

উত্তর:


11

পূর্ণসংখ্যা সম্পর্কে ইতিমধ্যে একটি ভাল উত্তর আছে, তবে আমার মনে হচ্ছে ভাসমান-পয়েন্টগুলি অপসারণ করা উচিত নয়। তার উত্তরে, বাইট 56 সম্ভবত এই এক্সেল শিটটি থেকে নেওয়া প্লুটো সর্বাধিক কক্ষপথে যাওয়ার অপশনটি নিয়েছিল , তাই আমি এটির সাথে আঁকড়ে থাকব।

এটি সৌরজগতের সীমানা এখানে রাখে:

7,376,000,000 কিলোমিটার = 7.376x10 ^ 9 কিমি = 7.376x10 ^ 14 সেমি ≈ 7.4x10 ^ 14 সেমি

ডাবল যথার্থ ফ্লোটিং পয়েন্ট বিন্যাস অফার 15 উল্লেখযোগ্য দশমিক সর্বোচ্চ স্পষ্টতা। সুতরাং আপনি ভাগ্যবান: যদি আপনার উত্স সূর্যের কেন্দ্রস্থলে থাকে এবং আপনি প্লুটো এর চারপাশে কোনও অবস্থান ব্যবহার করেন, আপনি সমস্ত সেন্টিমিটারকে প্রতিনিধিত্ব করতে পারেন , যেমন সি ++ তে:

printf("%.0Lf\n", 7.4e14);
printf("%.0Lf\n", 7.4e14 + 1.0);
printf("%.0Lf\n", 7.4e14 + 2.0);

Output:
-------
740000000000000
740000000000001
740000000000002

সুতরাং আপনি যদি নিজের খেলাটি প্লুটোর কক্ষপথে সীমাবদ্ধ করতে পারেন তবে অভিনন্দন! আপনি এটির উপস্থাপনের জন্য ডাবলসের সাথে যথেষ্ট পরিমাণে নির্ভুলতা পেয়েছেন।

যদিও বিষয়ে সতর্ক থাকুন, একটি এটা প্রতিনিধিত্ব করতে যথেষ্ট যে সিমুলেশন , কিন্তু আশা করবেন না রেন্ডার এই থাকুন। আপনাকে 32-বিট ফ্লোটে রূপান্তর করতে হবে, সম্ভবত আপনার উত্সটি পরিবর্তন করতে হবে যাতে আপনি নিকটবর্তী বস্তুগুলির বিষয়ে পর্যাপ্ত নির্ভুলতা পান এবং এই সমস্তটি সঠিকভাবে রেন্ডার করতে আপনাকে সম্ভবত কিছু জেড-বাফার এবং ক্যামেরার হতাশার কৌশল ব্যবহার করতে হবে on ।

এখন, আপনি যদি চান যে আপনার নভোচারীরা অর্ট ক্লাউডে দূরের কিছু দূরে ধূমকেতু ঘুরে দেখেন , যা বেশ বড়, তবে এটি শেষ। প্রায় 10 ^ 16 সেমি, আপনি নির্ভুলতা হারাতে শুরু করেন:

printf("%.0Lf\n", 1.0e16);
printf("%.0Lf\n", 1.0e16 + 1.0);
printf("%.0Lf\n", 1.0e16 + 2.0);

Output:
-------
10000000000000000
10000000000000000 <-- oops
10000000000000002

এবং এটি অবশ্যই আরও খারাপ হয়।

সুতরাং আপনি যদি এই ক্ষেত্রে থাকেন তবে আপনি আরও কিছু উন্নত সমাধান চেষ্টা করতে পারেন। আমি আপনাকে গেম প্রোগ্রামিং রত্ন 4- তে পিটার ফ্রিজের নিবন্ধটি একবার দেখে নেওয়ার পরামর্শ দিচ্ছি : "২.৩ বৃহত্তর ওয়ার্ল্ড কোঅর্ডিনেটে নির্ভুলতার সমস্যাগুলি সমাধান করা"। আইআইআরসি, তিনি এমন একটি সিস্টেমের পরামর্শ দিয়েছেন যা আপনার প্রয়োজন অনুসারে কার্যকর হতে পারে, এটি আসলে এক ধরণের একাধিক বিভিন্ন সমন্বিত স্থান রয়েছে।

এটি কেবল কয়েকটি ইঙ্গিত, এই দৌড়ানোর জন্য আপনাকে সম্ভবত নিজের কোনও রেসিপি ব্যবহার করতে হবে। ইতিমধ্যে এমন ধরণের জিনিস প্রয়োগকারী কেউ আপনাকে আরও সহায়তা করতে পারে। উদাহরণস্বরূপ কেরবল স্পেস প্রোগ্রামের পিছনে লোকগুলিকে ইমেল ফায়ার করছে না কেন ?

আপনার খেলার জন্য শুভকামনা!


1
এই উত্তরটি ভাল কারণ এটি ওপেনজিএল এবং ডাইরেক্টএক্স-এর পছন্দ অনুসারে ব্যবহৃত 3 ডি ফ্লোটিং পয়েন্ট স্পেসে আরও সহজে ম্যাপ করে এবং এর ভাল উল্লেখ রয়েছে। অতএব, আমি এটি উত্তর হিসাবে চিহ্নিত করেছি :)
নিকোলাস হিল

Cool :) একটি বোনাস হিসাবে, এই সব খুব আনুমানিক হয়, তাহলে আপনি ব্রুস ডসন এর ব্লগে ভাসে সম্পর্কে আরো কিছু গভীর infos খুঁজে পাবেন: randomascii.wordpress.com/2012/05/20/...
লরেন্ট কুইভিডু

17

সৌরজগতের "প্রান্ত" এর জন্য প্লুটো ধরে নেওয়া (যদিও কেউ কেউ বলেন যে এটি প্রায় 3 আলোকবর্ষ শেষ)) প্লুটো, এটির সর্বোচ্চ কক্ষপথটি সূর্য থেকে প্রায় 7,376,000,000 কিলোমিটার দূরে is এটি 7.37600 × 10 ^ 14 সেন্টিমিটার। ব্যাসটি পেতে দ্বিগুণ এবং আপনি 1,475,200,000,000,000 সেন্টিমিটার পাবেন। এটি একটি 64 বিট দীর্ঘ সর্বোচ্চ আকারের মধ্যে ভাল। যেহেতু সৌরজগতের উচ্চতা তার ব্যাসের তুলনায় নগণ্য, তাই আমরা এটিকে উপেক্ষা করতে পারি।

সুতরাং হ্যাঁ, আপনি সৌরজগতে আপনার অবস্থানের প্রতিনিধিত্ব করতে দীর্ঘ ব্যবহার করতে পারেন। প্রকৃতপক্ষে, আপনি স্বাক্ষরিত দীর্ঘ (স্বাক্ষর ছাড়াই দ্বিগুণ) দিয়ে 9.75 হালকা বছর পর্যন্ত পজিশনগুলি থাকতে পারেন।

মনে রাখবেন দূরত্ব সন্ধানের ক্ষেত্রে এটি নয়। আপনি যে সর্বাধিক দূরত্বটি পেতে পারেন তা হ'ল আপনি যে সর্বাধিক দূরত্বে ভ্রমণ করতে পারেন তার বর্গমূল। দূরত্ব সন্ধানের জন্য একটি স্তরের বিশদ সিস্টেম ব্যবহার করে এটি অতিক্রম করা যায়। দূরত্বগুলি কতটা দূরে রয়েছে তা অনুমান করার জন্য আপনি কিছু সাধারণ চেক করতে পারেন (তাদের এক্স মান এবং y মানের তুলনা করুন), তারপরে ছোট দূরত্বের জন্য সেন্টিমিটার বৃদ্ধি থেকে বড় দূরত্বের জন্য 1,000,000 কিলোমিটার বৃদ্ধি ব্যবহার করুন।

অবশ্যই প্রশ্ন আছে, আপনি কি সত্যিই চান? সৌরজগতের 99.999% খালি জায়গাটি সম্পূর্ণরূপে উদ্বেগজনক। আপনি যদি সৌরজগতের সঠিকভাবে প্রতিনিধিত্ব করেন তবে আমি নিশ্চিত আশা করি আপনি পদার্থবিজ্ঞানের সঠিকভাবে প্রতিনিধিত্ব করছেন না। সৌরজগতে ঘুরতে অনেক সময় লাগে। বেশিরভাগ লোক আগ্রহী থাকার জন্য উপায় খুব দীর্ঘ।

আপনি এমনকি সৌরজগতের অবজেক্টগুলিকেও সেই নির্ভুলতার সাথে মডেল করতে যাচ্ছেন না কেন এমনকি এমন সূক্ষ্ম যথার্থতা কেন? আপনি যেখানে সমস্যায় পড়বেন সেখানেই। সূর্যের আয়তন 1.40900 × 10 ^ 18 ঘন কিলোমিটার। কিউবিক সেন্টিমিটার স্কেলে, একক বিট ব্যবহার করে সেই স্থানটি "দখল" হয়েছে তা উপস্থাপন করতে 1.4 × 10 ^ 33 বিট বা 1.6 × 10 ^ 23 গিগাবাইট লাগে takes আমার মনে হয় আপনার এতটা র‌্যাম নেই।


3
বেশ স্পট অন। সংক্ষিপ্ত সংস্করণ: আপনার উদ্বেগের মধ্যে ফ্লোটের নির্ভুলতা হ'ল।
আআআআআআআআআআআআআআআআআআআআআআআআআ

1
আপনি হবে ইন্টিজার, এমনকি 64-বিট সঙ্গে উপচে পেতে। প্লুটোকে ঘিরে মহাকাশযানের কক্ষপথ। মহাকাশযান থেকে সূর্যের দূরত্ব গণনা করার চেষ্টা করে। বর্গ। গম্ভীর গর্জন।
লরেন্ট কুইভিডু

3
আমি শেষ অনুচ্ছেদে দৃser়তার সাথে দৃ strongly়তার সাথে একমত নই - ওপির প্রশ্নটি যথাযথভাবে বোধগম্য হয় এবং অবস্থানগুলির বিষয়ে 1 সেন্টিমিটারের যথার্থতা সম্পর্কে যত্ন নেওয়ার জন্য প্রতিটি (কিউবিক) সেন্টিমিটারে আসলে আইটেম থাকার আশা করা উচিত নয়।
স্টিভেন স্টাডনিকি

1
@ স্টেভেনস্ট্যাডনিকি মেলা যথেষ্ট, তবে কিলোমিটার স্কেলে এখনও এটি প্রতি ঘনকিলোমিটারে 1 বিটের জন্য 164,029,188 গিগা বাইট। এটি আপনার গাড়ির স্পিডোমিটারে পারমাণবিক নির্ভুলতা চাইতে অনুরূপ। এটি যতটা প্রয়োজন ঠিক তার চেয়ে বেশি সঠিক।
মাইকেলহাউস

1
ঠিক আছে, এইউ বা হালকা বছরের স্কেলে যাওয়া খুব অসম্পূর্ণ। যেহেতু আমরা সৌরজগতের কথা বলছি। বড় নীহারিকার মতো হালকা বছর বা পার্সেকগুলি আরও বড় কিছুর জন্য ভাল।
MichaelHouse

2

BigIntegerআপনার প্রোগ্রামিং ভাষা যেটিকেই বলুক না কেন আপনি তা ব্যবহার করতে পারেন । এটি সীমাহীন আকারের পূর্ণসংখ্যা; এটি ভাল স্কেল করে - সাধারণত log(n)আকারের পূর্ণসংখ্যার জন্য সঞ্চয়স্থান ব্যবহার করে n

জাভা এবং সি # এটি আছে; আমি নিশ্চিত যে অন্যান্য ভাষাও তা করে। যদি তা না হয় তবে আপনি খুব বেশি কষ্ট ছাড়াই এটি পচন করতে এবং পুনরায় প্রয়োগ করতে পারেন।

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