2012-10-30 13 views
9

MATLAB का उपयोग कर के माध्यम से एक लाइन खींचें, मैं एक लाइन खंड इस कोड का उपयोग दो अंक जोड़ने बनाने के लिए कैसे पता:दो अंक

line([0 1],[0 1]) 

इस बिंदु से एक सीधी रेखा खंड ड्रॉ (0,0) बिंदु (1,1) के लिए।

जो मैं करने की कोशिश कर रहा हूं वह साजिश के किनारे पर उस पंक्ति को जारी रखता है। इन दो बिंदुओं के बीच एक रेखा खींचने की बजाय मैं के माध्यम से एक पंक्ति खींचना चाहता हूं जो दो बिंदुओं के किसी भी सेट के लिए पूरे आंकड़े को फैलाता है।

इस विशेष लाइन और एक एक्स = -10 के लिए: 10, y = -10: 10 भूखंड मैं लिख सकते हैं:

line([-10 10], [-10 10]); 

लेकिन मैं अंक के किसी सेट के लिए इस सामान्यीकरण करने के लिए की आवश्यकता होगी।

उत्तर

6

के बारे में क्या
function = long_line(X,Y,sym_len) 
     dir = (Y-X)/norm(Y-X); 
     Yp = X + dir*sym_len; 
     Xp = X - dir*sym_len; 
     line(Xp,Yp); 
    end 

sym_len एक X आसपास साजिश रची लाइन की उम्मीद लंबाई के आधे जा रहा है?

y = a*x + b; 
a के लिए

और b:

+0

यह समाधान वास्तव में वेक्टर (वाई-एक्स) और एक्स के साथ शुरू होने के बाद से समाप्त होने के बहुत करीब था। – CodeFusionMobile

10
  1. उन दो अंक के माध्यम से जाने लाइन समीकरण का समाधान

    a = (yp(2)-yp(1))/(xp(2)-xp(1)); 
    b = yp(1)-a*xp(1); 
    
  2. की साजिश रचने विंडो के किनारों का पता लगाएं

    xlims = xlim(gca); 
    ylims = ylim(gca); 
    

    या किनारों को दूर ले जाएं, ताकि आप अभी भी ज़ूमआउट कर सकें, बाद में x/y सीमाओं को रीसेट कर दें।
    या यदि इस समय कोई साजिश, अपने वांछित किनारों को परिभाषित है: लाइन समीकरण में

    xlims = [-10 10]; 
    ylims = [-10 10]; 
    
  3. उन किनारों में भरें और साजिश इसी अंक:

    y = xlims*a+b; 
    line(xlims, y); 
    
  4. और रीसेट किनारों

    xlim(xlims); 
    ylim(ylims); 
    

एक विशेष मामला है, लंबवत रेखा, जिसे आपको अलग से देखभाल करना होगा।