PDA

View Full Version : مختصات یک شیء در Form



aks2download
سه شنبه 20 اسفند 1387, 23:48 عصر
من یه عکس دارم که ثابت است و یک عکس دیگر که حرکت میکند
چگونه میشه وقتی عکسی که حرکت میکنه به عکسی که ثابت است میرسه یه پیغام بده؟
یهنی وقتی که مختصات آن تقریبا باهم برابر میشه؟؟؟
اگه کسی کدشو بنویسه خیلی ممنون میشم.

AliReza Vafakhah
چهارشنبه 21 اسفند 1387, 00:29 صبح
به نظر من باید پیکسل به پکسل مقایسه کنی که باز هم فکر کنه راه صحیحی نباشه

برای مقایسه هم تو سایت جستجو بزن

یادم که یه تاپیکی برای پیدا کردن نتقاط قرمز در تصویر وجود داشت همون به کارت میاد

موفق باشی

Zahed2008
چهارشنبه 21 اسفند 1387, 09:19 صبح
سلام، این خیلی راحته با گرفتن مختصات عکس ثابت(Top , Left) و تعیین لحظه ای مختصات عکس در حال حرکت(در روال MouseMove) و یک نامعادله مثل زیر:

x11 := image1.Left;
y11 := image1.Top;
x12 := x11+image1.width;
x12 := y11+image1.height;

x21 := image2.Left - 3;
y21 := image2.Top - 3;
x22 := image2.Left+image2.width + 3;
x22 := image2.Top+image2.height + 3;

if (x11 <= x22) and (x22 <= x12) then
if (y11 <= y22) and (y22 <= y12) then
...{ارتباط از بالا}
if (x11 <= x21) and (x21 <= x12) then
if (y11 <= y21) and (y21 <= y12) then
...{ارتباط از پائین}چپ و راستش رو خودت بنویس. :چشمک: موفق باشید.

mafazel
چهارشنبه 21 اسفند 1387, 09:33 صبح
من یه عکس دارم که ثابت است و یک عکس دیگر که حرکت میکند

قاعدتا شما از شیئ Image برای تصاویر استفاده کردی و توی یک رویداد ( مثلا تایمر) ویژگی Left یا Top اونو کم یا زیاد می کنی که تصویر حرکت کنه. خوب در همونجا چک کن. مثلا تصویر متحرک رو از راست به چپ حرکت میدی بنا براین در رویداد تایمر نوشتی Image1.Left := Image1.Left-1 خوب قبل یا بعد از اون دستور زیر رو بنویس:


if Image1.Left =Image2.Left+Image2.Width then ShowMessage('??????');

البته باید بالا و پایینش رو هم چک کنی که واقعا نزدیک شیء ثابت باشد:


if (Image1.Left =Image2.Left+Image2.Width)and
((Image1.Top+Image1.Height=Image2.Top)or(Image1.To p=Image2.Top+Image2.Height) then ShowMessage('??????');

ما در اینجا تقریبا را چک نکردیم و وقتی دقیقا لبه شی متحرک روی لبه شی ثابت افتاد پیغام میده. برای اینکه تقریبا را چک کنی باید متغیر ها را از هم کم کنی و اگر قدر مطلقش از عددی مثل 2 یا 3 کمتر بود (این عدد رنج تقریبا رو نشون میده) پیغام رو نشون بدی.


if Abs(Image1.Left -(Image2.Left+Image2.Width)<3 then ShowMessage('??????');

این موارد برای حرکت از راست به چپ ذکر شد. برای حرکت چپ به راست یا بالا به پایین یا پایین به بالا هم این کار رو باید بکنی.