2012-11-21 14 views
5

के बीच सभी पिक्सेल निर्देशांक प्राप्त करें मैं एक सीधी रेखा पर 2 दिए गए बिंदुओं के बीच सभी एक्स, वाई निर्देशांक प्राप्त करना चाहता हूं। हालांकि यह इतना आसान काम लगता है, मुझे लगता है कि मैं इसके चारों ओर अपना सिर नहीं ले सकता।2 पिक्सेल

तो, उदाहरण के लिए:

  • प्वाइंट 1: (10,5)
  • प्वाइंट 2: (15,90)
+0

कुछ समय पहले वे मुझे स्कूल में साइन, कोसाइन और टैंजेंट के बारे में सिखाते थे। http://www.mathsisfun.com/sine-cosine-tangent.html –

+1

डुपे - देखें: http://stackoverflow.com/questions/4672279/bresenham-algorithm-in-javascript –

+5

आप http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm – Alnitak

उत्तर

1

को देखते हुए बिंदु A (10, 5) और बी (15, 90) और सी (एक्स, वाई) एबी में हमने:

(x - 10)/(y - 5) = (15 - 10)/(90 - 5) 

आप क्या कर सकते एक्स = 10 से एक्स = 15 पुनरावृति और इसी y गणना करने के लिए है। चूंकि एक्स और वाई पूर्णांक हैं, कुछ बार आपको परिणाम को गोल करना होगा (या इसे छोड़ना होगा)।

9

संपादित करें: नीचे दिया गया समाधान केवल ज्यामितीय दृष्टिकोण से लागू होता है। स्क्रीन पर चित्रण सैद्धांतिक ज्यामिति से अलग है, आपको ब्रेसनहम के एल्गोरिदम का सुझाव देने वाले लोगों को सुनना चाहिए।


को देखते हुए, दो अंक है, और जानते हुए भी कि लाइन के समीकरण y = m*x + b, जहां m ढलान और b अवरोध पैदा करते हैं आप m और b गणना और फिर एक्स अक्ष के सभी मूल्यों के लिए आवेदन कर सकते हैं समीकरण है आपके ए और बी बिंदुओं के बीच:

var A = [10, 5]; 
var B = [15, 90]; 

function slope(a, b) { 
    if (a[0] == b[0]) { 
     return null; 
    } 

    return (b[1] - a[1])/(b[0] - a[0]); 
} 

function intercept(point, slope) { 
    if (slope === null) { 
     // vertical line 
     return point[0]; 
    } 

    return point[1] - slope * point[0]; 
} 

var m = slope(A, B); 
var b = intercept(A, m); 

var coordinates = []; 
for (var x = A[0]; x <= B[0]; x++) { 
    var y = m * x + b; 
    coordinates.push([x, y]); 
} 

console.log(coordinates); // [[10, 5], [11, 22], [12, 39], [13, 56], [14, 73], [15, 90]]