সূর্য চলাচলের জন্য কাজ?


9

সুতরাং, দিগন্তে একটি সূর্য স্প্রিট সেট করা হয়েছে (x = 0, y = ওয়ার্ল্ড হাইট / 2) আমি সূর্যকে উত্থিত করার জন্য একটি ক্রিয়া রচনা করার চেষ্টা করছি, তারপরে পড়ুন।

এটি করার সর্বোত্তম উপায়টি হ'ল পাপ ফাংশন হবে তবে এটি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে আমার কোনও ধারণা নেই।

যদি y = sin (x) ব্যবহার করে থাকেন তবে এক্স এর জন্য ধ্রুবক বেগ থাকার সময় পূর্ণ বক্ররেখার জন্য x এর মান 0 এবং পাই এর মধ্যে হতে হবে while

কোন চিন্তা বা পরামর্শ?

সম্পাদনা: ধন্যবাদ বলছি!

রোদে কাজ করছে!

উত্তর:


7

0 থেকে পাই ইস্যু সম্পর্কিত, সাধারণভাবে আপনাকে যা করতে হবে তা হল গুণক দ্বারা এক্স স্কেল করা। উদাহরণ:

y = sin(x * pi / worldWidth)

http://www.wolframalpha.com/input/?i=Plot%5BSin%5Bx%5D%2C+%7Bx%2C+0%2C+Pi%7D%5D

যাইহোক, এটি সম্ভবত আপনি খুঁজছেন তা যথেষ্ট বাঁকানো পেতে পারে না। আপনার প্যারামেট্রিক ফর্মটি ব্যবহার করা উচিত:

t = 0 -> pi over the course of a day
y = sin(t)   -> goes from 0 up to 1 at noon, then down to 0 again
x = (1-cos(t))/2 -> starts at 0 goes up to 1 by sundown.

http://www.wolframalpha.com/input/?i=ParametricPlot%5B%7B1+-+Cos%5Bt%5D%2C+Sin%5Bt%5D%7D%2C+%7Bt%2C+0%2C+Pi% 7D% 5D

এক্স এর জন্য ওয়াই এবং কোস এর পাপের সংমিশ্রণ একটি উপবৃত্ত বের করতে পারে।


ধন্যবাদ, এটি দুর্দান্ত। আমি খুব গণিতকেন্দ্রিক নই। গণিতে আমার দক্ষতাগুলি কেবলমাত্র প্রাথমিক ক্যালকুলাস।
রস

12

জিমির মতো একটি এলিপস সম্ভবত এই গতির জন্য আরও ভাল ফিট। আগ্রহীদের জন্য কিছুটা বিশদ সহ এটি কীভাবে বাস্তবে বাস্তবায়ন করা যায় সে সম্পর্কে এখানে কিছু ধারণা।

সময় গ্রহণ

প্রারম্ভিকদের জন্য, গেমের জগতের সময়ের ট্র্যাক রাখতে আপনার একটি পরিবর্তনশীল প্রয়োজন। আপনি এটি আপনার পছন্দমতোভাবে প্রয়োগ করতে পারেন, তবে এখানে একটি উদাহরণ রয়েছে। আমি একটি পরিবর্তনশীল নামক ব্যবহার করব hoursযা 0 থেকে 24 এর মধ্যে পরিবর্তিত হয় (যদিও এটি 24 এ পৌঁছায় এটি 0 এ ফিরে আসে)।

যদিও বাস্তব জীবনের বিপরীতে, আমি কেবল সেই দিনটি 0 ঘন্টা থেকে শুরু হয় এবং রাত 12 ঘন্টা শুরু হয় consider এটি কিছু গণনা সহজ করে তুলবে।

গেমের সময়টি বাস্তব সময়ের সাথে পরিবর্তিত হয় এমন হারটিও আমি সংজ্ঞায়িত করব। এই উদাহরণস্বরূপ, প্রতি দুই মিনিটের রিয়েল টাইম খেলায় এক ঘন্টার সাথে মিলবে।

float hours = 0.0f;                       // From 0 to 24 wrapping around
const float HoursPerSecond = 1f / 120f;   // E.g. 2 minutes = 1 hour ingame

public void Update(float elapsed)
{
    hours += elapsed * HoursPerSecond;    // Advance clock
    if(hours >= 24f) hours -= 24f;        // Wrap around 24 hours
}

কনফিগারেশন

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

float startX = 0;
float endX = 1000;
float horizonY = worldHeight/2;
float amplitudeY = 200;

সূর্যের স্থানাঙ্ক গণনা করা হচ্ছে

দিনের নির্দিষ্ট সময়ের জন্য আমাদের সূর্যের অবস্থান গণনার এখন সময় time আমি জিমি দ্বারা ব্যবহৃত একই প্যারামিটারিক ফাংশনটি ব্যবহার করব তবে [0..2PI] এর পরিবর্তে ডোমেনের সাথে (সূর্যকে তার প্রকৃত অবস্থানে ফিরিয়ে আনার জন্য)

x = (1-কোস (টি)) / 2

y = পাপ (টি)

এটি একটি ভাল ফাংশন কারণ এক্স মান 0 থেকে 1 এবং তারপরে আবার 0 এ পরিবর্তিত হয় (যা আমরা আমাদের সূর্যের শুরু এবং শেষের এক্স মানগুলিতে ম্যাপিং করব) এবং Y মান 0 থেকে শুরু হয় এবং 1 এবং পিছনে চলে যায় আবার 0 তে (যা আমাদের দিনের অংশ হবে) এবং তারপরে আসল অবস্থানে ফিরে আসার আগে নেতিবাচক দিকটিতে ঠিক একই জিনিসটি পুনরাবৃত্তি করে (যা আমাদের রাত্রি হবে যদিও সূর্যটি এই সময়ে টানা হবে না)।

প্রথম পদক্ষেপটি [0..24) পরিসীমা থেকে আমাদের ফাংশনের পরিসীমা যা [0..2PI) এর পরিসীমা ঘটাচ্ছে:

float t = (hours / 24f) * MathHelper.TwoPi;          // Scale: [0..24) to [0..2PI)

পরবর্তী আমি 0 এবং 1 এর মধ্যে মানগুলি ফিরে পেতে আমি ফাংশনগুলি প্রয়োগ করি:

float horizontal = (float)((1-Math.Cos(t)) / 2f);    // Changes: 0 1 0
float vertical = (float)(Math.Sin(t));               // Changes: 0 1 0 -1 0

এবং অবশেষে আমরা সেই মানগুলি সূর্যের পরামিতিগুলি ব্যবহার করে স্কেল করি:

float sunX = startX + (endX - startX) * horizontal;    // From startX to endX and back
float sunY = horizonY + amplitydeY * vertical;         // Up and down around horizonY

আশ্চর্যজনক জন্য +1, আমার একমাত্র আক্ষেপ যে আমি দুটি উত্তর চিহ্নিত করতে পারি না!
রস

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