2011-11-18 39 views
13

मैं एक परियोजना जहां यह अधिक समझ में आता है वैक्टर और विविध त्रिकोणमिति से तदर्थ कार्यों का उपयोग कर रखने के लिए कुछ समर्थन कक्षाओं का निर्माण शुरू करने में बिंदु पहुँच गए हैं। मैं उम्मीद करता हूं कि इसके लिए कई सी ++ पुस्तकालय होंगे, लेकिन मैं उस गति और सुविधाओं को त्यागना नहीं चाहता हूं जिसका उपयोग मैं करता हूं।पूर्णांक त्रिकोणमिति के लिए सी ++ लाइब्रेरी, वैकल्पिक अनुमानों के साथ अनुकूलित गति?

विशेष रूप से, मैं पूर्णांक कोण का उपयोग करने में सक्षम होना चाहते हैं, और मैं प्रज्वलन गति इस तरह अनुमानों द्वारा प्रदान रखना चाहते हैं:

static inline int32_t sin_approx(int32_t angle) 
//Angle is -32768 to 32767: Return -32768 to 32767 
{ 
    return (angle<<1) - ((angle*abs(angle))>>14); 
} 

तो, इससे पहले कि मैं बेकार में अपने खुद के रोल, वहाँ किसी भी वास्तव में कर रहे हैं सी ++ के लिए तेज़ फिक्स्ड पॉइंट लाइब्रेरीज़ जैसे वैक्टर जैसे टेम्प्लेट क्लासेस, जहां मैं पूर्णांक की चौड़ाई निर्दिष्ट कर सकता हूं और उसके ऊपर तेजी से अनुमान लगाया गया है जैसे कि मुझे देखना चाहिए?

+0

पाप के लिए अनुमान कैसे है? – TonyK

+0

मैं ईमानदारी से नहीं जानता। मैंने इसे एक साल पहले एक फ्लोटिंग पॉइंट पाप सन्निकटन के आधार पर लिखा था, मैं अनुमान लगा रहा हूं, कुछ पैराबॉलिक फ़ंक्शन। इसे पूर्णांक में घुमाने के बाद, उपरोक्त परिणामस्वरूप। मूल कार्य को भूलने के बाद मुझे नहीं पता कि यह अब कैसे काम करता है। हालांकि यह लगभग एकदम सही सर्कल खींचता है। – porgarmingduod

+2

ओह, अब मैं इसे देखता हूं। यह रेंज के प्रत्येक आधे हिस्से को पैराबोल के रूप में 0 और 2 पर शून्य और अधिकतम/न्यूनतम मान +/- 1 के अनुमानित करता है। अच्छा! – TonyK

उत्तर

4

मैं कुछ साल पहले इस मार्ग नीचे चला गया जब मैं निश्चित बात करने के लिए फ्लोटिंग प्वाइंट से कुछ ऑडियो फिंगरप्रिंटिंग कोड परिवर्तित करने के लिए किया था। कठिन भाग डीसीटी थे (जो एक बड़ी कोसाइन तालिका का उपयोग करते थे) और एक उच्च परिशुद्धता लघुगणक। मुझे मौजूदा पुस्तकालयों के रास्ते में आश्चर्यजनक रूप से कम मिला। तब से, मैंने सुना है कि मूल सोनी प्लेस्टेशन (पीएस 1) में कोई फ़्लोटिंग-पॉइंट समर्थन नहीं था, इसलिए इसके लिए विकास मंच (फोरी?), यदि वे अभी भी मौजूद हैं, तो हो सकता है कि आप जो खोज रहे हैं।

कुछ लोगों के साथ मैंने काम किया है NewMat लाइब्रेरी के साथ अच्छी किस्मत है, हालांकि यह त्रिकोणमिति की बजाय रैखिक बीजगणित की तरफ तैयार है, और फ्लोटिंग-पॉइंट संख्याओं पर ध्यान केंद्रित करने लगता है। फिर भी, इसकी साइट this list की ओर ले जाती है, जो चेक आउट करने के लायक दिखती है। मुझे spuc भी मिला, एक सिग्नल प्रोसेसिंग लाइब्रेरी जो निश्चित-बिंदु समर्थन के लिए अच्छा हो सकती है। और साल पहले मैंने फ्रौनहोफर से सिग्नल प्रोसेसिंग टेम्पलेट लाइब्रेरी (एसपीटीएल) देखा था। मुझे लगता है कि यह मालिकाना था, लेकिन किसी भी तरह से उपलब्ध हो सकता है।

सभी ही कहा जा रहा, मुझे लगता है तुम बहुत क्या आपके पास पहले से साथ करीब हैं। चूंकि आपके पास साइन फ़ंक्शन है, इसलिए मूल रूप से आपके पास कोसाइन फ़ंक्शन भी है, बशर्ते आप इनपुट को उचित रूप से बदल दें (cos(x) == sin(x + pi/2))। चूंकि टेंगेंट साइन और कोसाइन (tan(x) = sin(x)/cos(x)) का भाग्य है क्योंकि आप मूल रूप से त्रिकोणमिति के लिए हैं।

वैक्टरों के संबंध में, क्या एसटीएल वेक्टर और एसटीएल एल्गोरिदम के साथ वाल्एरे कक्षाएं आपको बहुत करीबी नहीं मिलती हैं? यदि नहीं, तो बूस्ट का math libraries हमेशा होता है।

क्षमा करें मैं आपको उस चांदी की बुलेट पर इंगित नहीं कर सकता जिसे आप ढूंढ रहे हैं, लेकिन आप जो करने की कोशिश कर रहे हैं, वह इन दिनों असामान्य है। जो लोग परिशुद्धता चाहते हैं वे आम तौर पर सीधे फ़्लोटिंग-पॉइंट पर जाते हैं, जिसमें आधुनिक प्रोसेसर पर सभ्य प्रदर्शन होता है, और लाइब्रेरी समर्थन के बहुत सारे होते हैं। जो लोग संसाधन-बाधित हार्डवेयर पर गति चाहते हैं उन्हें आमतौर पर परिशुद्धता की आवश्यकता नहीं होती है और वेक्टर द्वारा ट्रिगर नहीं कर रहे हैं, और शायद सी ++ नहीं कर रहे हैं। मुझे लगता है कि आपका सबसे अच्छा विकल्प खुद को रोल करना है। इसे पुनर्निर्मित करने के बजाए, एक नए संदर्भ में पहिया डिजाइन पैटर्न को लागू करने के रूप में इसके बारे में सोचने का प्रयास करें। :)

+0

बहुत अच्छी जानकारी, वास्तव में। मैं देखकर चौंक गया हूं कि मैंने बूस्ट की ज्यामिति लाइब्रेरी को याद किया (हालांकि यह किसी भी मामले में अधिक हो सकता है) – porgarmingduod