الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة في رسم المستطيلات في الماتلاب

بدأه pink girl في 3 مايو 2010 · 19 رد · 1,614 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

انا لدي الكود التالي واقصد بالخطوه y=y+30

هو انا يتحرك 30 بكسل ثم يرسم مستطيل اخر ولكنه لايرسم الا اول مستطيل فقط ولايدخل لل for

p=imread('testc5.tif');
        [m n]=size(p);
        c=44;
        r=59;
         for i=1:n
 x=c(1,1)-1;
 y=r(1,1)-1;
 p(y:y+26,x)=255;
 p(y:y+26,x+15)=255;
 p(y,x:x+15)=255;
 p(y+26,x:x+15)=255;
 y1=y+30;
      end
         imshow(p);

تم تعديل هذه المشاركة بواسطة ibr_exn في 3 مايو 2010 في 22:19

#2

يجب مراجعة الكود وتعديله، هناك اخطاء عديدة ، مثلا:

1. سيتم رسم مستطيل واحد فقط (لان عبارة عرض الصورة خارج التكرار)

2. ماهي ال c, وال r

3. ال y1 لا تستخدم في البرنامج، فقط تتعدل قيمتها .

لاظهارالعرض على الشاشة بعد التحديث يجب استخدام drawnow

بالتوفيق

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#3

الكود التالي يقوم بالمطلوب

clc;
p=imread('testc5.tif');
[m n]=size(p);

r=30; c=20; % recatbgle 30 x 20
y=1; x=1; i=1; 
while i<m
    j=1;
    while j<n
        p(x:x+r,y)=255;
        p(x:x+r,y+c)=255;
        p(x    ,y:y+c)=255;
        p(x+r,y:y+c)=255;
        if y+c<n
           y=y+c;
        else
           j=n; 
        end
        imshow(p);
        drawnow;
        pause
    end
    if x+r<m
       y=1; 
       x=x+r;
    else
       i=m;
    end
end

عبارة pause تقوم بايقاف البرنامج حتى يتم الضغط على زر الادخال enter (ضغط الزر يكون عند شاشة الماتلاب الرئيسيه)

هي تفيد فقط للتبع و يمكن حذفها.

بالتوفيق،

تم تعديل هذه المشاركة بواسطة ibr_exn في 3 مايو 2010 في 22:53

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#4

لو سمحت انا اريد المستطيل يرسم ثم يترك 30 بكسل ويرسم اخر ويبدأ من بكسل(x,y)

انا احدده وشكرا على الرد

#5

1. يتم تعديل قيم x,y الابتدائيه (خارج التكرار) لنبدأ من نقطة محدده

2. نقم بتعديل الزيادة داخل التكرار حسب الطلب، مثلا لنقفز 30 بكسل في كل صف نزد قيمة y داخل التكرار لتصبح

y=y+30;

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#6

شكرا جزيلا للأخ ابراهيم

ولكن اريد ان اسأل كيف يرسم المستطيلات بدون الضغط على enter

انا اريده يرسم من حاله

مع خالص شكري

#7
اقتباس

عبارة pause تقوم بايقاف البرنامج حتى يتم الضغط على زر الادخال enter (ضغط الزر يكون عند شاشة الماتلاب الرئيسيه)

هي تفيد فقط للتبع و يمكن حذفها.

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#8

اذا اردت ان يرسم المستطيل ا لاول انا حددت احداثياته في نصف الصوره

واريد البرنامج ان يرسم المستطيلات من هذا المستطيل ويرجع لأول الصفحه ويرسم فيها ويرسم كذلك مستطيلات لآخر الصفحه يعني يرجع يرسم المستطيلات في كل الصفحه من خلال احداثيات المستطيل

#9

اختي الفاضله،

يمكن الاجابة على الاستفسار بقليل من التفكير وبقليل من التعديل في الكود.

تفكير + تطبيق الافكار + محاولات وتجارب لاكثر من مرة + اخطاء +اعادة التعديل والتطبيق من جديد = الوصول للحل الصحيح.

الاعتماد على الحل الجاهز دائما يقتل ملكة التفكير و يضر اكثر مما ينفع.

بالتوفيق،

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#10

السلام عليكم ورحمة الله وبركاته

انا جربت اني احدد احداثيات للمكان الي اريد ان يبدأ الرسم منه ولكن الكود يرسم المستطيلات من بعد المكان الي انا حددته ولايرجع لبداية الصوره ايضا الكود لاحظت انه يزيد اعمده وباتالي تتغير المسافات الي انا حددتها بين كل مستطيلين ممكن تساعدني في حل هالمشكله ولك خالص شكري

#11

انا حليت مشكلة الاعمده بشرط معين واصبح يرسم المستطيلات على حسب حجم الصوره ولكن الى الان لم اتوصل لحل لمشكلة انه يرجع يرسم المستطيلات من اول الصفحه انا لما احدد احداثيات يرسم من بعدها ومايرجع من الاول ارجو الافاده وشكرا

#12

لرسم اول مستطيل من مكان محدد، نعدل قيم x,y خارج التكرار. هذا كل المطلوب.

سيتم بعدها المتابعة الى النهاية. والبدء من اول عمود في السطر التالي.

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#13

انا قمت بتعديل الكود ووضعت شرط حتى يجتفظ بحجم الصوره الاصليه ولايزيد فيها اعمده او صفوف ولكن المشكله هي اني اريد ان ارسم اول مستطيل من النص فأقوم بتحديد احداثياته وبالتاي يبدأ يرسم من بعده طيب انا ابغاه يرجع قبل المستطيل الي انا حددته ويرسم من قبله

يعني انا اقدر احدد الاحداثيات الي يبدأ منها

ولكن المشكله كيف اخليه يرجع يرسم من الاول من قبل هذا المستطيل الي انا حددته

ولك خالص تقديري

تم تعديل هذه المشاركة بواسطة pink girl في 8 مايو 2010 في 19:33

#14
اقتباس
رسم اول مستطيل من مكان محدد، نعدل قيم x,y خارج التكرار. هذا كل المطلوب.

سيتم بعدها المتابعة الى النهاية. والبدء من اول عمود في السطر التالي.

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#15

انا متعمده احدد احاثيات المستطيل الموجود في النص وابغى البرنامج يبدأمن عند هذا المستطيل ويرجع لأول الصوره يرسم انا حددت احاثيات المستطيل الي بدأت منه الي هو في النص بس ابغى البرنامج يرجع للي قبل ويرسم من الاول من غير احداثيات

#16

انا حاولت اكتب هذا الكود لكن رفض يطلع سطر اعلى

clc;

p=zeros(376,640);
[m n]=size(p);
r=26;
c=15;
%r=40;
%c=28;
%recatbgle 30 x 20
%y=43; 
%x=19;
y=173;
x=276;
i=m;
while i>1
    j=n;
    while j>1
        p(x:x+r,y)=255;
        p(x:x+r,y+c)=255;
        p(x ,y:y+c)=255;
        p(x+r,y:y+c)=255;
        if y+c<n
           y=y-15-8;
           %to be sure not to add more columons 
           if y+15+8<n
         % y=y+19+19;
        else
           j=1; 
           end
        end
        imshow(p);
        drawnow;
        %pause
    end
    if x-r>1
       %y=1;
       y=173;
       x=x-37;

       %to be sure not to add more rows. 
       if x-37>1
      % x=x+34+17;
    else
       i=1;

       end
    end 

end



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#17
clc;
p=zeros(376,640);
[m n]=size(p);
r=26; c=15; 
y=173; x=276; i=1;

while i<m
    j=1;
    while j<n
        p(x:x+r,y)=255;
        p(x:x+r,y+c)=255;
        p(x    ,y:y+c)=255;
        p(x+r,y:y+c)=255;
        if y+c<n
           y=y+30;
        else
           j=n; 
        end
        imshow(p);
        drawnow;
    end
    if x+r<m
       y=1; 
       x=x+r;
    else
       i=m;
    end
end

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#18

هذا الكود هو فيه المشكله الي انا اتكلم عنها

الكود يقرا من نصف الصوره وهذا الي ابغاه ويكمل مستطيلات للأخير وهذا ابغاه

بس المشكله انه مايرجع يرسم من الاول انا ابغى الكود من بعد المستطيل الي رسمه في النص يرجع يكمل زي ماكمل للأخير يرجع يكمل من نفس المستطيل الموجود في النص يرجع ييكمل للبدايه

#19

هل هذا هو المطلوب ؟ يبدأ يرسم في السطر الثاني من نفس احداثيات الصف السابق؟

clc;
p=zeros(376,640);
[m n]=size(p);
r=26; c=15; 
y=173; x=276; i=1;

while i<m
    j=1;
    while j<n
        p(x:x+r,y)=255;
        p(x:x+r,y+c)=255;
        p(x    ,y:y+c)=255;
        p(x+r,y:y+c)=255;
        if y+c<n
           y=y+30;
        else
           j=n; 
        end
        imshow(p);
        drawnow;
    end
    if x+r<m
       y=173; 
       x=x+r;
    else
       i=m;
    end
end

اذا لا. فانا اعترف اني عجزت عن فهم الذي تبغيه. :wacko:

تم تعديل هذه المشاركة بواسطة ibr_exn في 8 مايو 2010 في 23:53

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#20

لا مو هذا اللي انا ابغاه

هذا اخر كود يرسم مستطيلات لكن يعني لو عرضت الصوره بعد الرسم

راح تلاقي الحجم زاد

انا ابغى ارسم مستطيل في اول الصوره اعتمادا على المعطيات اللي من المستطيل المرسوم في النص

يعني تقريبا بنمشي بالعكس

احنا في هذا الكود جالسين نمشي على اليمين وينزل تحت

لا انا ابغى امشي بالعكس على اليسار واطلع فوق

اتمنى وضحت الفكره

مواضيع مشابهة