2013-02-25 24 views
5

मैं समझने की कोशिश कर रहा हूं कि मैं पॉइंट्स का एक सेट कैसे खींच सकता हूं (/ पिक्सेल सेट करें) जो लाइब्रेरी फ़ंक्शंस का उपयोग किये बिना सर्कल बनाता है ।सी ग्राफिक्स लाइब्रेरी या किसी अन्य लाइब्रेरी फ़ंक्शंस का उपयोग किये बिना पिक्सेल को कैसे सेट करें/सेट करें

अब, त्रिज्या दिए गए बिंदुओं के (x, y) समन्वय प्राप्त करना सरल है।

for (x=-r; x <r; x=x+0.1) { 
     y = sqrt(r*r - x*x); 
     draw(x,y, 0, 0); 
    } 

लेकिन एक बार मेरे पास अंक होने के बाद, आप वास्तव में सर्कल को कैसे आकर्षित करते हैं जो मुझे भ्रमित कर रहा है। मैं ग्राफिक पुस्तकालय का उपयोग कर सकते, लेकिन मैं समझने के लिए ग्राफिक्स पुस्तकालय

का उपयोग किए बिना कैसे आप यह कर सकते चाहते
void draw(float x, float y, float center_x, float center_y) { 
      //logic to set pixel given x, y and circle's center_x and center_y 
      // basically print x and y on the screen say print as a dot . 
      // u 'd need some sort of a 2d char array but how do you translate x and y 
      // to pixel positions 
    } 

कोई किसी भी लिंक/संदर्भ साझा करने या समझाने यह कैसे काम करता सकते हैं?

+3

किस पर्यावरण में? – JasonD

+4

कृपया "ड्रा" को परिभाषित करें! यदि आपका मतलब है: "प्रदर्शन पर प्रिंट करें", यह आपके द्वारा उपयोग की जाने वाली प्रणाली में बहुत अधिक निर्भर करता है। –

उत्तर

6
char display[80][26]; 

void clearDisplay(void) { 
    memset(display, ' ', sizeof(display)); 
} 

void printDisplay(void) { 
    for (short row=0; row<26; row++) { 
    for (short col=0; col<80; col++) { 
     printf("%c", display[col][row]); 
    } 
    printf("\n"); 
    } 
} 


void draw(float x, float y, float center_x, float center_y) { 
    if (visible(x,y)) { 
    display[normalize(x)][normalize(y)] = '.'; 
    } 
} 

EDITH: आप अपने प्रश्न के और अधिक शामिल करने के लिए अपनी टिप्पणी बदल गया है,, इसलिए मैं अपने जवाब में थोड़ा विस्तार होगा।

आप निर्देशांक के दो सेट:

  • दुनिया निर्देशांक ये ज्यादातर अपने x और y कर रहे हैं (बढ़ाया देशांतर और दुनिया के नक्शे या एक विद्युत माइक्रोस्कोप पर femtometers पर अक्षांश की तरह)
  • प्रदर्शन निर्देशांक: इन आपके प्रदर्शित डिवाइस का प्रतिनिधित्व, एक नेक्सस 7 या नेक्सस 10 टैबलेट की तरह, इसके भौतिक आयामों के साथ (पिक्सेल या Pels या बिंदु प्रति इंच)

आप एक मीट्रिक की जरूरत है, जो आपके दुनिया प्रदर्शन coordi में निर्देशांक बदल देती है नितंब। चीजों को और अधिक जटिल बनाने के लिए, आपको उन चीजों को क्लिप करने के लिए एक विंडो (दुनिया का वह हिस्सा जो आप दिखाना चाहते हैं) को क्लिप करने की आवश्यकता है (जैसे अफ्रीका, जब आप यूरोप दिखाना चाहते हैं)। और तुम अपनी दुनिया अपने प्रदर्शन निर्देशांक मैच के लिए (यूरोप का कितना आप प्रदर्शित करना चाहते)

इन मेट्रिक्स और कतरनों सरल बीजीय परिवर्तनों हैं निर्देशांक ज़ूम करने के लिए चाहते हो सकता है

  • ज़ूम प्रदर्शन- को विश्व समन्वय समन्वय: प्रदर्शन-एक्स = विश्व x * कारक (femtometer या पिक्सेल के लिए किलोमीटर)
  • प्रदर्शित-केंद्र के लिए दुनिया भर में केंद्र का अनुवाद: प्रदर्शन-एक्स + समायोजन

और इतने पर। "एलेजब्राइक ट्रांसफॉर्मेशन" या "ज्यामेट्रिक्स" के लिए बस विकिपीडिया

+0

अच्छा ... - लेकिन क्यों 26 नहीं 25 या इससे भी बेहतर 24? – alk

+0

@alk: बस एक संख्या, आप सही हैं, 24 बेहतर हो सकते हैं –

2

यह एक कठिन सवाल है क्योंकि तकनीकी रूप से सी में अंतर्निहित इनपुट/आउटपुट क्षमता नहीं है। यहां तक ​​कि एक फाइल को लिखने के लिए एक लाइब्रेरी की आवश्यकता होती है। कुछ सिस्टमों पर, रीयल-मोड डॉस की तरह, आप सीधे उस वीडियो मेमोरी तक पहुंच सकते हैं और उस मेमोरी में मूल्य लिखकर पिक्सल सेट कर सकते हैं, लेकिन आधुनिक ओएस वास्तव में ऐसा करने के तरीके में आते हैं। आप ओएस के बिना अधिक अनुमोदित CPU मोड में प्रोग्राम लॉन्च करने के लिए बूटलोडर लिखने का प्रयास कर सकते हैं, लेकिन यह कीड़े का एक बड़ा हिस्सा है।

तो, सबसे कठिन, stdio लाइब्रेरी का उपयोग करके, आप अन्य उत्तर शो के रूप में एसीआई ग्राफिक्स का उपयोग करके stdout पर लिख सकते हैं, या आप xbm जैसे एक साधारण ग्राफिक्स प्रारूप को आउटपुट कर सकते हैं जिसे एक अलग छवि-देखने के कार्यक्रम के साथ देखा जा सकता है । एक बेहतर विकल्प प्रारूप हो सकता है।

सर्कल-ड्राइंग भाग के लिए, क्लासिक Bresenham algorithm पर एक नज़र डालें। या, बहुत अधिक जानकारी के लिए, जिम ब्लिंन के A Trip Down the Graphics Pipeline के अध्याय 1 में विभिन्न सर्कल-ड्राइंग एल्गोरिदम का वर्णन किया गया है!