2013-07-20 6 views
7

प्रयोग करने के लिए एक लेजर सूचक की नकल।प्रभावी रूप से मेरी बिल्ली मैं matlab कि एक तरीका है कि मेरी बिल्ली स्क्रीन पर का पीछा करते हुए मजा आएगा में एक लेजर सूचक emulates का उपयोग कर एक कोड लिखने की कोशिश कर रहा हूँ मैटलैब

figure('menubar','none','color','k') 
h = plot(0,'r.','MarkerSize',20); 
xlim([-1 1]); ylim([-1 1]) 
axis off 
phi1=(1+sqrt(5))/2; 
phi2=sqrt(3); 
step= 0.0001; % change according to machine speed 
for t=0:step:100 
    set(h,'xdata',sin(t+phi1*t),'ydata',cos(phi2*t)) 
    drawnow 
end 

इस कोड के साथ "मुद्दों" निम्नलिखित हैं::

  1. सूचक एक स्थिर गति से कम या ज्यादा ले जाता है और धीमी गति से नहीं है यह मैं अब तक क्या किया है है एक नजदीकी स्टॉप पर और फिर अप्रत्याशित रूप से आगे बढ़ें।

  2. प्रक्षेपण कुछ हद तक दोहराना है, हालांकि मैंने इसे तर्कहीन संख्याओं का उपयोग करने की कोशिश की, लेकिन समग्र गतिएं बाएं से बाएं हैं। मुझे लगता है कि एक तेज प्रक्षेपण परिवर्तन मदद करेगा।

मुझे पता है कि यह पारंपरिक प्रोग्रामिंग प्रश्न नहीं है लेकिन फिर भी मैं एक प्रोग्रामिंग समस्या हल करना चाहता हूं। मैं आपकी मदद की सराहना करता हूं और निश्चित रूप से मेरे प्रश्न का उत्तर देने के नए तरीकों के लिए खुला हूं जो मैंने जो कोड जोड़ा है उसका उपयोग नहीं करता है।

+3

बढ़िया परियोजना । लेकिन संभावित रूप से एक मॉनिटर बलिदान की लागत पर ?! – voxeloctree

+0

आप प्रत्येक को नियंत्रित करने के लिए पैरामीटर के साथ स्थिति, वेग, और त्वरण की धारणा को लागू कर सकते हैं। Http://gamedev.stackexchange.com – Amro

+0

मज़ा में प्रेरणा की तलाश करें। आप इसे करने में कुछ नई चीजें भी सीख सकते हैं। एक [अजीब आकर्षण] (http://mathworld.wolfram.com/StrangeAttractor.html) या अन्य अराजक आकर्षण को अनुकरण करें। :-) प्रसिद्ध [लोरेंज आकर्षण] (http://en.wikipedia.org/wiki/Lorenz_attractor) करना बहुत आसान है। या इस पर गौर [2-डी यादृच्छिक चलता है] (http://en.wikipedia.org/wiki/Random_walk) और [वीनर प्रक्रियाओं] (http://en.wikipedia.org/wiki/Wiener_process) के लिए शोर जोड़ने के लिए तरीके कुछ अन्य सिस्टम/प्रक्रिया के लिए। – horchler

उत्तर

3

शानदार सवाल है, तो अच्छा मैंने सोचा कि मैं एक अपने आप को जाना है करने के लिए अपने जीवन के 15 मिनट का समय लगेगा। मानकों के साथ चारों ओर

n = 20; %number of steps 
pos = [0,0]; % initial position 
vel = 4; % laser velocity 
acc = 400; % laser acelertation 
dt = 0.01; % timestep interval 
figure 
set(gcf,'Position',get(0,'Screensize')); 
for i=1:n 
    point = rand(1,2); 
    dist = 1; 
    while dist > 0.05 % loop until we reach the point 
     plot(pos(1),pos(2),'o','color','r','MarkerFaceColor','r') 
     axis equal 
     xlim([0,1]) 
     ylim([0,1]) 
     drawnow 
     % create random point to move towards 
     dist = pdist([point;pos],'euclidean'); 
     % calculate the direction & mag vector to the point 
     dir = (point-pos)/norm((point-pos)); 
     mag = norm(point-pos); 
     % update position 
     displ = vel*dt - 0.5*acc*mag*dt^2; 
     pos = pos + dir*displ; 
    end 
end 

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

+1

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

+0

मैंने सामान्य वितरण की कोशिश की, लेकिन मैं अभी भी समान वितरण पसंद करता हूं! मुझे लगता है कि वास्तविक arbiter बिल्ली होना है, हालांकि मुझे यकीन नहीं है कि आप इस आकलन करने के लिए मात्रात्मक प्रयोग कैसे स्थापित करेंगे ...! – en51nm

संबंधित मुद्दे