PDA

View Full Version : چطور یک ماتریس رو به شکل قطری پیمایش کنم؟



habibb
شنبه 21 دی 1392, 10:24 صبح
سلام
ماتریس که می دونید آرایه ای چند در چنده یعنی یک بعد هم هست!این یادآوری بود!
قطرم می دونید که چیه ! این قطر از دو جهت میشه شروعش کرد ولی مهم نیست از کجا شروع می کنید به پیمایش مهم اینه که قطری پیمایش(حرکت) کنید!حتی می تونید از قطر اصلی پیمایش کنید شروع کنید.
ماتریس هم متغیره یعنی ثابت نیست
یعنی ممکنه هر شکلی داشته باشه!
مثلا 1×1 1×2 4×3 کلا فرض کن شکل ماتریس ها مثل جدول ضربه!

مهرداد صفا
یک شنبه 22 دی 1392, 12:05 عصر
سلام
ماتریس که می دونید آرایه ای چند در چنده یعنی یک بعد هم هست!این یادآوری بود!
قطرم می دونید که چیه ! این قطر از دو جهت میشه شروعش کرد ولی مهم نیست از کجا شروع می کنید به پیمایش مهم اینه که قطری پیمایش(حرکت) کنید!حتی می تونید از قطر اصلی پیمایش کنید شروع کنید.
ماتریس هم متغیره یعنی ثابت نیست
یعنی ممکنه هر شکلی داشته باشه!
مثلا 1×1 1×2 4×3 کلا فرض کن شکل ماتریس ها مثل جدول ضربه!
مطمئنم مغز ایرانی قادر به حل این سوال نیست

سلام.
در مورد ماتریسهای مربع نقطه هایی که x و y برابر داشته باشند روی قطر اول (قطر اصلی) قرار دارند. در واقع باید نسبت x به y ، نسبت عرض باشد به طول.
برای مثال:


if((p.x/p.y)==(width/height))
//نقطه p روی قطر اصلی قرار دارد


در مورد قطر دوم هم (با فرض اینکه اندیس از صفر شروع می شود):


if(((width-p.x)/(p.y+1))==(width/height))
//نقطه p روی قطر اصلی دوم قرار دارد

به زبان ساده شما برای حرکت قطری باید به نسبت عرض به طول به x و y اضافه و یا از آنها کم کنید. همین:لبخند:.

habibb
یک شنبه 22 دی 1392, 22:55 عصر
سلام.
در مورد ماتریسهای مربع نقطه هایی که x و y برابر داشته باشند روی قطر اول (قطر اصلی) قرار دارند. در واقع باید نسبت x به y ، نسبت عرض باشد به طول.
برای مثال:


if((p.x/p.y)==(width/height))
//نقطه p روی قطر اصلی قرار دارد


در مورد قطر دوم هم (با فرض اینکه اندیس از صفر شروع می شود):


if(((width-p.x)/(p.y+1))==(width/height))
//نقطه p روی قطر اصلی دوم قرار دارد

به زبان ساده شما برای حرکت قطری باید به نسبت عرض به طول به x و y اضافه و یا از آنها کم کنید. همین:لبخند:.

این درسته که باید طول و عرض ها در هر قطر ماتریس کم و زیاد بشن من در مورد خانه های آرایه می خوام باشه
ولی شما از نقطه و پیکسل می گید ماتریس به خانه های آرایه می گن!
اگر اینی که گفتید درسته ضمیمه کنید مقدار بدید به ماتریس و مقدارهارو به شکل قطری نمایش بدین!
خب اینی که گفتید همه می دونن که باید هر قطری x , y ها کم و زیاد بشه.
ولی توی هر قطری چه جوری شروع کنم چه جوری پایان بدم چه جوری کم و زیاد کنم!http://forum.p30world.com/images/New-Smile3/19.gif

Akhoundi
شنبه 28 تیر 1393, 17:36 عصر
سلام.
در مورد ماتریسهای مربع نقطه هایی که x و y برابر داشته باشند روی قطر اول (قطر اصلی) قرار دارند. در واقع باید نسبت x به y ، نسبت عرض باشد به طول.
برای مثال:


if((p.x/p.y)==(width/height))
//نقطه p روی قطر اصلی قرار دارد


در مورد قطر دوم هم (با فرض اینکه اندیس از صفر شروع می شود):


if(((width-p.x)/(p.y+1))==(width/height))
//نقطه p روی قطر اصلی دوم قرار دارد

به زبان ساده شما برای حرکت قطری باید به نسبت عرض به طول به x و y اضافه و یا از آنها کم کنید. همین:لبخند:.
قابل توجه habibb !!!
با همین ایده به نتیجه درست رسیدم.
چیزی که من بهش رسیدم اینه که روی یک قطر حاصل (طول+عرض) ثابته (اگه اولین درایه رو 11 بگیریم از 2 شروع میشه و اگه ماتریس معمولی تویه برنامه باشه 00 هست و از0 شروع میشه)
حالا ما تونستیم کل ماتریس رو به کلاس های هم ارزی تقسیم کنیم که اولین کلاس با توضیحات بالا 0 یا 2 هست و بیشترین کلاس حاصل جمع تعداد سطر ها و تعداد ستون هاست

Akhoundi
شنبه 28 تیر 1393, 17:49 عصر
این هم یه نمونه کد که تو php نوشتم

<?
function ghotr($a,$i,$j){
$result=array();
settype($a,'integer');
for($k=0;$k<$i;$k++){
for($l=0;$l<$j;$l++){
if($l+$k==$a){$result[]='['.$l.$k.']';}
}
}
print "Ghotr num:".$a."<br/>";
foreach($result as $b){
print $b."<br/>";
}
}
function ShowAll($i,$j){
//$i=Tedad-Satr
//$j=Tedad-Sotoon
for($t=0;$t<$i+$j-1;$t++){
ghotr($t,$i,$j);
}
}
ShowAll(10,10);
//Use in this form ShowAll(SATR,SOTOON);
?>

Akhoundi
شنبه 28 تیر 1393, 17:53 عصر
اگه نفهمیدید می تونم کد هارو براتون توضیح بدم