সূর্যোদয় ও সূর্যাস্ত


12

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

আপনার কাজ, কোডার্স হ'ল সম্ভব ক্ষুদ্রতম কোড তৈরি করা যা দশমিক অক্ষাংশ এবং দ্রাঘিমাংশ গ্রহণ করে (ডিগ্রি এন এবং ডাব্লুতে নেওয়া হয়, সুতরাং ডিগ্রি এস এবং ই negativeণাত্মক হিসাবে নেওয়া হবে) এবং YYYY-MM-DD ফর্ম্যাটে একটি তারিখ ( জানুয়ারী 1, 2000 থেকে) এবং এটি সূর্যোদয় এবং সূর্যাস্তের জন্য 24 ঘন্টা ফর্ম্যাটে দু'বার ছুঁড়ে ফেলবে।

যেমন আজকের জন্য অস্ট্রেলিয়ার সিডনিতে

riseset -33.87 -151.2 2013-12-27

05:45 20:09

বোনাসস: -100 আপনি যদি উচ্চতাতে ফ্যাক্টর করতে পারেন -100 আপনি যদি দিবালোকের সঞ্চয়কে ফ্যাক্টর করতে পারেন

অক্ষাংশ এবং দ্রাঘিমাংশ বা ক্লায়েন্ট মেশিনের নিজস্ব টাইম জোনের ভিত্তিতে ইনপুটটিতে উল্লিখিত প্রাসঙ্গিক টাইম জোনে কোডটি অবশ্যই স্পিট আউট করে।


3
অপেক্ষা করুন, কী, আমাদের একটি [অক্ষাংশ x দ্রাঘিমাংশ] => [টাইমজোন] অনুসন্ধান করতে হবে? আমরা কি এর জন্য একটি ডেটা ফাইল পাই? বা কোন সার্ভার আমরা অ্যাক্সেস করতে পারি? বা এমন কোনও ভাষা আছে যা এই জাতীয় জিনিসগুলি অন্তর্নির্মিত আছে? কোনটি বলতে পারেন? বা আমাদের কি সময়সীমার সীমানা মুখস্থ করতে হবে? কি নির্ভুলতা? আমরা এই তথ্য কোথায় পাবেন? আপনি কি বুঝতে পারবেন যে এই ডেটা কোডের বেশিরভাগ দৈর্ঘ্য গ্রহণ করবে? টাইমজোন সীমানায় ঠিক যে স্থানাঙ্কগুলি পড়ে তা সম্পর্কে কী? বলুন, ভৌগলিক খুঁটি? এছাড়াও, যখন মেরুতে রাত / দিনের সময় ইনপুটটি মেরু অঞ্চল হয় তখন কী আচরণ অনুমোদিত? সীমার বাইরে স্থানাঙ্ক সম্পর্কে কী?
জন ডিভোরাক

আমি চাই ভালবাসেন একটি idealized গোলক উপরে একটি বিন্দু উপর ভিত্তি করে দিগন্ত গণনা করতে চ্যালেঞ্জ, কিন্তু আমি ঘৃণা হাতে কম্প্রেস programatically decopmress এটি সংশ্লিষ্ট চ্যালেঞ্জ, এবং তারপর, একটি সময় অঞ্চল লুকআপ ম্যাপ আপ দেখুন। অবশ্যই, যদি না আমরা আদর্শিক টাইমজোনগুলি ব্যবহার করতে পারি (অফসেটটি বেছে নেওয়া হয় যাতে দুপুরের সময় সূর্যটি সর্বোচ্চ থাকে, তবে এটি নিকটতম ঘন্টা পর্যন্ত গোল হয়)।
জন ডিভোরাক

1
@ জ্যানডভোরাক আপনি যা কিছু করতে পারেন তা ব্যবহার করুন, আপনি যে ভাষাটি ব্যবহার করেন তা যদি ক্লায়েন্টের সময় অঞ্চলটি কাজে লাগাতে পারে তবে তা সব উপায়ে করুন ...
ওয়ালি ওয়েস্ট

1
পোলার দিন / রাত্রি যখন পোলার অঞ্চলগুলির জন্য কাঙ্ক্ষিত আচরণ কী?
জন ডিভোরাক

1
এখানে হ'ল একটি সরঞ্জাম যা ঠিক একই কাজ করে: weatherimages.org/latlonsun.html
isaসা আদিল

উত্তর:


4

আমি এটি লেখার জন্য বেশ কিছুটা সময় ব্যয় করেছি:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from math import *


class RiseSet(object):

    __ZENITH = {'official': 90.833,
                'civil': '96',
                'nautical': '102',
                'astronomical': '108'}

    def __init__(self, day, month, year, latitude, longitude, daylight=False,
                 elevation=840, zenith='official'):
        ''' elevation is set to 840 (m) because that is the mean height of land above the sea level '''

        if abs(latitude) > 63.572375290155:
            raise ValueError('Invalid latitude: {0}.'.format(latitude))

        if zenith not in self.__ZENITH:
            raise ValueError('Invalid zenith value, must be one of {0}.'.format
                            (self.__ZENITH.keys()))

        self.day = day
        self.month = month
        self.year = year
        self.latitude = latitude
        self.longitude = longitude
        self.daylight = daylight
        self.elevation = elevation
        self.zenith = zenith

    def getZenith(self):
        return cos(radians(self.__ZENITH[self.zenith]))

    def dayOfTheYear(self):
        n0 = floor(275*self.month/9)
        n1 = floor((self.month + 9) / 12)
        n2 = (1 + floor((self.year - 4*floor(self.year/4) + 2) / 3))
        return n0 - (n1*n2) + self.day - 30

    def approxTime(self):
        sunrise = self.dayOfTheYear() + ((6 - (self.longitude/15.0)) / 24)
        sunset = self.dayOfTheYear() + ((18 - (self.longitude/15.0)) / 24)
        return (sunrise, sunset)

    def sunMeanAnomaly(self):
        sunrise = (0.9856 * self.approxTime()[0]) - 3.289
        sunset = (0.9856 * self.approxTime()[1]) - 3.289
        return (sunrise, sunset)

    def sunTrueLongitude(self):
        sma = self.sunMeanAnomaly()
        sunrise = sma[0] + (1.916*sin(radians(sma[0]))) + \
                  (0.020*sin(radians(2*sma[0]))) + 282.634

        if sunrise < 0:
            sunrise += 360
        if sunrise > 360:
            sunrise -= 360

        sunset = sma[1] + (1.916*sin(radians(sma[1]))) + \
                 (0.020*sin(radians(2*sma[1]))) + 282.634

        if sunset <= 0:
            sunset += 360
        if sunset > 360:
            sunset -= 360

        return (sunrise, sunset)

    def sunRightAscension(self):
        stl = self.sunTrueLongitude()
        sunrise = atan(radians(0.91764*tan(radians(stl[0]))))

        if sunrise <= 0:
            sunrise += 360
        if sunrise > 360:
            sunrise -= 360

        sunset = atan(radians(0.91764*tan(radians(stl[1]))))

        if sunset <= 0:
            sunset += 360
        if sunset > 360:
            sunset -= 360

        sunrise_stl_q = (floor(stl[0]/90)) * 90
        sunrise_ra_q = (floor(sunrise/90)) * 90
        sunrise = sunrise + (sunrise_stl_q - sunrise_ra_q)
        sunrise = sunrise/15.0

        sunset_stl_q = (floor(stl[1]/90)) * 90
        sunset_ra_q = (floor(sunset/90)) * 90
        sunset = sunrise + (sunset_stl_q - sunset_ra_q)
        sunset /= 15.0

        return (sunrise, sunset)

    def sunDeclination(self):
        sunrise_sin_dec = 0.39782 * sin(radians(self.sunTrueLongitude()[0]))
        sunrise_cos_dec = cos(radians(asin(radians(sunrise_sin_dec))))

        sunset_sin_dec = 0.39782 * sin(radians(self.sunTrueLongitude()[1]))
        sunset_cos_dec = cos(radians(asin(radians(sunrise_sin_dec))))

        return (sunrise_sin_dec, sunrise_cos_dec,
                sunset_sin_dec, sunset_cos_dec)

    def sunHourAngle(self):
        sd = self.sunDeclination()
        sunrise_cos_h = (cos(radians(self.getZenith())) - (sd[0]* \
                         sin(radians(self.latitude))) / (sd[1]* \
                         cos(radians(self.latitude))))
        if sunrise_cos_h > 1:
            raise Exception('The sun never rises on this location.')

        sunset_cos_h = (cos(radians(self.getZenith())) - (sd[2]* \
                         sin(radians(self.latitude))) / (sd[3]* \
                         cos(radians(self.latitude))))
        if sunset_cos_h < -1:
            raise Exception('The sun never sets on this location.')

        sunrise = 360 - acos(radians(sunrise_cos_h))
        sunrise /= 15.0

        sunset = acos(radians(sunrise_cos_h))
        sunset /= 15.0

        return (sunrise, sunset)

    def localMeanTime(self):
        sunrise = self.sunHourAngle()[0] + self.sunRightAscension()[0] - \
                 (0.06571*self.approxTime()[0]) - 6.622
        sunset = self.sunHourAngle()[1] + self.sunRightAscension()[1] - \
                 (0.06571*self.approxTime()[1]) - 6.622
        return (sunrise, sunset)

    def convertToUTC(self):
        sunrise = self.localMeanTime()[0] - (self.longitude/15.0)

        if sunrise <= 0:
            sunrise += 24
        if sunrise > 24:
            sunrise -= 24

        sunset = self.localMeanTime()[1] - (self.longitude/15.0)

        if sunset <= 0:
            sunset += 24
        if sunset > 24:
            sunset -= 24

        return (sunrise, sunset)

    def __str__(self):
        return None

এখন এটি এখনও কার্যকরী নয় (আমি কিছু গণনা আঁকিয়েছি) - আমি এটির পরে ফিরে আসব (যদি এখনও আমার সাহস থাকে) এটি সম্পূর্ণ করার / মন্তব্য করার জন্য

এছাড়াও, বিষয়টি গবেষণা করার সময় আমি খুঁজে পেয়েছি এমন কিছু আকর্ষণীয় সংস্থান:


3
আমি আপনার মন্তব্যটি দেখেছি # It's late, I'm tired, and OP is a prick for asking me to do this. এই কাজটি করার কোনও বাধ্যবাধকতা নেই ... দয়া করে আপনার কোডে এই জাতীয় মন্তব্য রাখবেন না ... এটি আমাকে সহ অন্যান্য কোডারদের সাথে অনুকূলভাবে বসবে না। আমি এটিকে সত্যই প্রশংসা করি যে আপনি এটি একটি লাল গরম গো দিয়েছেন, এবং আপনি সরবরাহ করেছেন এমন অন্যান্য লিঙ্কগুলি, তবে দয়া করে আর কখনও এই জাতীয় মন্তব্য ব্যবহার করবেন না ...
ওলিওয়েস্ট

@ এলিসেড'আন্নুজিও আপনার কাছে আমার ক্ষমা চাইছে।
দেনেব

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

@ অ্যালেক্স, আপনি কি বুঝতে পারেন যে এই চ্যালেঞ্জটি এক বছরের পুরানো? আমি নিশ্চিত যে সে জিতেছে।
mbomb007

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