PDA

View Full Version : رسم نقطه روی شی Image



Mask
شنبه 01 خرداد 1389, 19:24 عصر
با سلام
بر روی image با کد زیر نقطه میکشم.

Image1.Canvas.Pixels[1,2]:=clred
اما مشکل اینجاست که این شیئ فقط اعداد صحیح قبول میکنه.
من میخام مثلا x رو بدم 1.345 و y رو بدم 2.334.
در ضمن قابل توجه است که من نمیخام اعدادم رو گرد کنم یا به عدد صحیح تبدیل کنم.
و همچنین یه مشکل دیگه که من میخام از اعداد منفی هم استفاده کنم.
مثلا x رو بدم -10.33 و y رو بدم -3,456.
حالا باید چیکار کنم.

Felony
شنبه 01 خرداد 1389, 19:33 عصر
برای چی میخواین این کار رو بکنید ؟
پیکسل های مانیتور که ممیزی نیستن که بخواین ممیزی آدرس پیکسل مورد نظرتون رو بدید ، پیکسل ها عدد صحیح هستند .

در مورد اعداد منفی هم نمیشه چون مانیتور مختصاتش از 0 و 0 شروع میشه یعنی فقط قسمتی از محور مختصات که X و Y + داره ، شکل زیر محور مختصات هست و مربع زرد رنگ مانیتور رو تو این محور نمایش میده :


http://barnamenevis.org/forum/attachment.php?attachmentid=49467&stc=1&d=1274541885

برای دادن مختصات منفی میتونید مختصات وسط مانیطور رو به دست بیارید و اون نقطه رو به عنوان یک قرارداد برای برنامه مرکز محور مختصات خودتون در نظر بگیرید رسم های مورد نظر خودتون رو بر اساس نقطه مرکز تعیین شده رسم کنید ، اینطوری میتونید مقادیر منفی رو هم درج کنید .

tdkhakpur
شنبه 01 خرداد 1389, 20:56 عصر
من میخام مثلا x رو بدم 1.345 و y رو بدم 2.334.

خب میتوانید این کار را انجام دهید ولی باید مستقیما با سخت افزار و crt مانیتور کار کنید که کار خطر ناکیه و ممکنه مانیتورتان از تنظیم دربیاد یا به قول معروف بسوزد
میتوانید کتاب برنامه نویسی سیستمهای شخصی تالیف مایکل تیشر جلد دوم را مطالعه کنید.
ولی اگر کارتان چیز دیگری هست میتوانید اصل کارتان را ذکر کنید. به هر صورت شما تمایلی به گرد کردن اعداد ندارید پس کار جالی باید مد نظرتان باشد.

Felony
شنبه 01 خرداد 1389, 20:59 عصر
خب میتوانید این کار را انجام دهید ولی باید مستقیما با سخت افزار و crt مانیتور کار کنید که کار خطر ناکیه و ممکنه مانیتورتان از تنظیم دربیاد یا به قول معروف بسوزد
میتوانید کتاب برنامه نویسی سیستمهای شخصی تالیف مایکل تیشر جلد دوم را مطالعه کنید.
ولی اگر کارتان چیز دیگری هست میتوانید اصل کارتان را ذکر کنید. به هر صورت شما تمایلی به گرد کردن اعداد ندارید پس کار جالی باید مد نظرتان باشد.

:متعجب: این کار امکان پذیر نیست ، وقتی مانیتور پیکسل هاش عدد صحیح هست خالا چه با اسمبلی بنویسید چه با C چه با دلفی در هر صورت امکان پذیر نیست ، نکنه میخواین با کدتون به سخت افزار قابلیت جدید اضافه کنید ؟

tdkhakpur
شنبه 01 خرداد 1389, 22:05 عصر
این کار امکان پذیر نیست ، وقتی مانیتور پیکسل هاش عدد صحیح هست خالا چه با اسمبلی بنویسید چه با C چه با دلفی در هر صورت امکان پذیر نیست ، نکنه میخواین با کدتون به سخت افزار قابلیت جدید اضافه کنید ؟
بحث روی اعداد نیست بحث روی کنترل تفنگ الکترونیکی هست که میتواند فواصل کوتاه یا بلند را پیمایش کند به فرض پیمایش مد نظر 2 میلی متر باشد میتوان این پیمایش را به 1.5 میلیمتر هم کاهش داد.
البته دنیای جدید از بحث تفنگ الکترونی خارج شده و به طرف دنیای دیجیتال روی اورده ولی هنوز هم خیلی ها به خاطر کیفیت تصویر از مانیتورهای انالوگ استفاده میکنند
لازمه که شما هم کتاب فوق را یه نگاهی بندازید.

Felony
شنبه 01 خرداد 1389, 22:20 عصر
بحث روی اعداد نیست بحث روی کنترل تفنگ الکترونیکی هست که میتواند فواصل کوتاه یا بلند را پیمایش کند به فرض پیمایش مد نظر 2 میلی متر باشد میتوان این پیمایش را به 1.5 میلیمتر هم کاهش داد.
البته دنیای جدید از بحث تفنگ الکترونی خارج شده و به طرف دنیای دیجیتال روی اورده ولی هنوز هم خیلی ها به خاطر کیفیت تصویر از مانیتورهای انالوگ استفاده میکنند
لازمه که شما هم کتاب فوق را یه نگاهی بندازید.

والا تا اونجا که من میدونم مانیتور این دسترسی ها رو به سیستم نمیده ، این کتابی که میگید برای کدوم انتشارات هست ؟

tdkhakpur
شنبه 01 خرداد 1389, 22:32 عصر
والا تا اونجا که من میدونم مانیتور این دسترسی ها رو به سیستم نمیده ، این کتابی که میگید برای کدوم انتشارات هست ؟
چرا نده مگر تا حالا رزولیشن صفحه را تغییر ندادید این تغییر نمونه ای از اون کارهاست اما بصورت استاندارد تعریف شده و فاصله ها بصورت واحد در نظر گرفته شده است اما داخل بردهای دیجیتال این تنظیمات ثابت بوده و تغییر ندارند مگر حالتهای استاندارد رزولیشن.

یک 15 سالی هست منتشر شده به همین دلیل شاید کمیاب باشد و مال انتشارات مرکز نشر دانشگاهی باید باشد.

Mask
شنبه 01 خرداد 1389, 23:17 عصر
ممنون از دوستان
پیرو حلمعادلات دو مجهولی(که خودم حلش کردم)
معادله زیر رو ببینید
x=2+5y
برای رسم این معادله کافیه به y عدد 2 رو بدید در این صورت x میشه 12 . پس ما اکنون یک نقطه داریم.
اگه به همین صورت بریم جلو و یکی یکی به y عدد اظافه کنیم چنتا نقطه بدست میاد که با به هم وصل کردنشون این معادله رسم میشه.
حالا اگه معادله به شکل زیر بود چیکار باید کرد؟
x=0.002-0.05y
ممنون.

tdkhakpur
شنبه 01 خرداد 1389, 23:42 عصر
حالا اگه معادله به شکل زیر بود چیکار باید کرد؟
x=0.002-0.05y

اگر شما یک نگاهی به نحوه اجرا و رسم نقاط داخل برنامه های opengl کرده باشید مطمئنا خواهید دید که صفحه موجود فقط یک صفحه مجازی هست که نقطه صفر مرکز صفحه در نظر گرفته شده است شما نقطه مرکز صفحه را داخل برنامه تان نقطه صفر بگیرید همانطور که opengl اینطور در نظر میگیرد .
اگر شما منفیها ها را مثبت در نظر گرفته و لی جهت جرکت را سمت چپ و یا به پایین در نظر بگیرید مسئله شما حل میشود.(فقط باید جهت را با الگوریتم مشخص کنید که در هنگام ترسیم مثلا به x یا y اضافه میشود یا کم!.

Mask
یک شنبه 02 خرداد 1389, 12:02 عصر
اگر شما یک نگاهی به نحوه اجرا و رسم نقاط داخل برنامه های opengl کرده باشید مطمئنا خواهید دید که صفحه موجود فقط یک صفحه مجازی هست که نقطه صفر مرکز صفحه در نظر گرفته شده است شما نقطه مرکز صفحه را داخل برنامه تان نقطه صفر بگیرید همانطور که opengl اینطور در نظر میگیرد .
اگر شما منفیها ها را مثبت در نظر گرفته و لی جهت جرکت را سمت چپ و یا به پایین در نظر بگیرید مسئله شما حل میشود.(فقط باید جهت را با الگوریتم مشخص کنید که در هنگام ترسیم مثلا به x یا y اضافه میشود یا کم!.
چطوری؟
میشه بیشتر توضیح بدید.

Felony
یک شنبه 02 خرداد 1389, 12:13 عصر
اگر شما یک نگاهی به نحوه اجرا و رسم نقاط داخل برنامه های opengl کرده باشید مطمئنا خواهید دید که صفحه موجود فقط یک صفحه مجازی هست که نقطه صفر مرکز صفحه در نظر گرفته شده است شما نقطه مرکز صفحه را داخل برنامه تان نقطه صفر بگیرید همانطور که opengl اینطور در نظر میگیرد .
اگر شما منفیها ها را مثبت در نظر گرفته و لی جهت جرکت را سمت چپ و یا به پایین در نظر بگیرید مسئله شما حل میشود.(فقط باید جهت را با الگوریتم مشخص کنید که در هنگام ترسیم مثلا به x یا y اضافه میشود یا کم!.


چطوری؟
میشه بیشتر توضیح بدید.

من هم که از اول همین رو گفتم !
اگر در پیاده سازیش مشکل دارید یه نمونه براتون بنویسم ...

tdkhakpur
یک شنبه 02 خرداد 1389, 19:48 عصر
جناب Delphi-7 برای چی با ارسال چند تاپیک با موضوع یکسان پیگیر مشکلتان میشود.اینجا هم این خواسته را قبلا ارسال کردید.
http://barnamenevis.org/forum/showthread.php?t=221906

Mahmood_M
یک شنبه 02 خرداد 1389, 20:28 عصر
اول باید یک صفحه مختصات به صورت مجازی برای کارتون ایجاد کنید ، منظور از ایجاد صفحه اینه که بازه هایی رو به عنوان X و Y و - X و - Y در نظر بگیرید ، و نقاط رو در اونها مقداردهی کنید ...
کمی برمیگرده به مبحث تبدیلات هندسی در ریاضی ، فرض کنید صفحه ی مختصات رو که مرکزش گوشه ی بالا سمت چپ صفحه هست رو به وسط صفحه انتقال دادید ، تمام نقاط صفحه نظیر مبدا مختصات هم باید تغییر کنه و مختصات جدیدی براش در نظر بگیرید ...
برای رسم اعداد اعشاری هم باید محورها رو درجه بندی کنید ! ، یعنی مثلا اگر عددی با تقریب یک دهم داشتید ، فاصله ی دو نقطه ی صحیح از صفحه رو برابر با 10 پیکسل بگیرید و بین این ده پیکسل نقطه ی مورد نظر رو مشخص کنید و همینطور برای یک هزارم و ...

موفق باشید ...

Mask
یک شنبه 02 خرداد 1389, 21:49 عصر
جناب Delphi-7 برای چی با ارسال چند تاپیک با موضوع یکسان پیگیر مشکلتان میشود.اینجا هم این خواسته را قبلا ارسال کردید.
ممنون از حسن توجهتون.
اما اگه توجه کنید در اون تاپیک سوال بیشتر بر حل تابع بود و اینجا رسم اون.
در کل اگه فکر میکنید خیلی جا گرفته ، بفرمایید تا کلا تاپیکهارو پاک کنم.:افسرده:

tdkhakpur
یک شنبه 02 خرداد 1389, 21:59 عصر
اما اگه توجه کنید در اون تاپیک سوال بیشتر بر حل تابع بود و اینجا رسم اون.

ولی به این شکلی سول کرده بودید

با سلام خدمت دوستان گل
من معادله زیر رو دارم:
y=0/02+0/05x
حالا میخاستم بدونم آیا در دلفی تابعی برای رسم این معادله وجود داره. و اگه داره چطوری باید رسمش کنم ؟
اصلا در این رابطه اطلاعات ندارم.
دوستان اگه محبت کنند ممنونم.

من که داخل دو تاپیک تفاوت چندانی نمی بینم هر دو موضوع و نتیجه یکسانی دارند.

در کل اگه فکر میکنید خیلی جا گرفته ، بفرمایید تا کلا تاپیکهارو پاک کنم
پس کسایی که داخل تاپیک برای شما پاسخ ارسال کردند کشک بشن دیگه!!

Mask
یک شنبه 02 خرداد 1389, 22:21 عصر
پس کسایی که داخل تاپیک برای شما پاسخ ارسال کردند کشک بشن دیگه!!
با تمام احترامی که بابت سابقه و سطح علمیتون ،برای شما قائل هستم ازتون خواهش میکنم ادامه ندید.
وگرنه...

مصطفی ساتکی
دوشنبه 03 خرداد 1389, 15:00 عصر
شما آقایون چند نفری که به این تاپیک پاسخ دادید.مگه حتماً بایستی چیزی رو که اطلاعات ندارید پاسخ بدید. اون طرف حق داشت گفت ادامه ندید چون اطلاعاتی در این زمینه ندارید بی جهت پاسخ می دید.اگر قرار باشه هر کس بخاد این کارو بکنه بیاد مختصاتو تغییر بده پس microsoft این 20 ساله کدوم api رو develop میکنه.

خب میتوانید این کار را انجام دهید ولی باید مستقیما با سخت افزار و crt مانیتور کار کنید که کار خطر ناکیه و ممکنه مانیتورتان از تنظیم دربیاد یا به قول معروف بسوزد
میتوانید کتاب برنامه نویسی سیستمهای شخصی تالیف مایکل تیشر جلد دوم را مطالعه کنید.آخه قربون شکلت اون برای Dos بود حافظه رو به صورت dma هر جور میخاستیم استفاده می کردیم اون interupt ها هم دیگه تو ویندوز کار نمی کنه.

می برمیگرده به مبحث تبدیلات هندسی در ریاضی ، فرض کنید جواب :
همون طور که می دونید توابع api اجازه نمی دن که شما عدد اعشاری رو به توابع رد کنید پس شما به Map (نگاشت) اعداد نیاز دارید. بعدش هم برای اینکه مختصات تو View عادی بزرگتر نشون نده می تونین Map مربوط به DC رو تغییر بدید به دقت های 0.0001 و 0.001

SetMapMode(Canvas.Handle,MM_HIENGLISH);یا

SetMapMode(Canvas.Handle,MM_MM_HIMETRIC)برای اون تغییر مختصات هم Viewport مربوط به DC رو روی مرکز صفحه تنظیم کنید.

SetViewportOrgEx(Canvas.Handle,ClientWidth div 2 ,ClientHeight div 2, nil);
Canvas.Rectangle(-100,-100,100,100);

Mahmood_M
دوشنبه 03 خرداد 1389, 23:42 عصر
دوستان لطفا کل کل نکنید ! ، بحث تاپیک رو دارید منحرف می کنید ...
جناب Delphi_CAT راه شما به نظر منطقی تر میاد و مربوط به همون موضوع میشه ، اما راه های دیگه هم هست ، یکیش همونی که من گفتم ، ولی راهی که شما گفتید منطقی تر به نظر میاد ...
خوب می تونستید راه پیشنهادیتون رو ارایه کنید و کاربر رو هم به جوابش برسونید ، لازم نیست در مورد جوابهای دیگران اظهار نظری داشته باشید ، اگر مطمئنید که راه حل های قبلی غلط هست با استدلال نشون بدید که چرا غلطه نه اینکه از جملاتی مثل این استفاده کنید :

شما آقایون چند نفری که به این تاپیک پاسخ دادید.مگه حتماً بایستی چیزی رو که اطلاعات ندارید پاسخ بدید.
وقتی سئوالی پرسیده میشه هرکسی با توجه به اطلاعاتی که داره سعی می کنه به کاربری که سئوال پرسیده کمک کنه ، حالا کمک یکی مفید خواهد بود و شاید هم کمک یک نفر اشتباه باشه ، در نهایت کاربری که سئوال پرسیده راه حل مناسب تر رو انتخاب خواهد کرد ...

به هر حال ، امیدوارم دیگه این بحث ادامه پیدا نکنه ، وگرنه مجبور میشم تاپیک رو قفل کنم ...

موفق باشید ...

Mask
سه شنبه 04 خرداد 1389, 12:22 عصر
ممنون از دوستان عزیز (Delphi_CAT (http://barnamenevis.org/forum/member.php?u=37538) و tdkhakpur (http://barnamenevis.org/forum/member.php?u=99732))
فکر نمی کنم که هیچکدوممون اونقدر بی مشغله باشیم که نیاز به کل کل باشه.
به نظرم بهترین روش برای اثبات ، بهترین نظریه ، انجام واقعی و نوشتن برنامست.
حالا من بیام و چون 4 تا کتاب خوندم و بگم این درسته ، منتقی نیست.
از دوستان خواهش میکنم یه نمونه برنامه کاربردی از نظریشون قرار بدهند.
شکر خدا متخصص تو این سایت زیاده.
من به شخصه اومدم اینجا که اطلاعاتمو بالا ببرم.
وگرنه از لجبازی و کل کل هر کسی راسته خودش هست و کم نمیاره.
از بعد منطقی ، موضوع را نگاه کنید نه احساسی.
منتظر برنامه از دو دوست خوبم (Delphi_CAT (http://barnamenevis.org/forum/member.php?u=37538) و tdkhakpur (http://barnamenevis.org/forum/member.php?u=99732)) هستم.
موفق باشید.

tdkhakpur
سه شنبه 04 خرداد 1389, 13:03 عصر
منتظر برنامه از دو دوست خوبم (Delphi_CAT (http://barnamenevis.org/forum/member.php?u=37538) و tdkhakpur (http://barnamenevis.org/forum/member.php?u=99732)) هستم.

جناب Delphi_7 این مقدار کد برای شروع تان باید مناسب باشد کد زیر ایتدائی ترین کارگرافیک هست ولی کد زیر مفهوم مطلبی که نقطه صفر را مرکز قرار میدهد را بصورت عملی نشان میدهد (فقط یک button را به فرمتان اضافه و unit را با کدهی زیر تعویض کنید.)


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, math;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure DrawArrow;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// sin(d*3.14159f/180);
procedure TForm1.DrawArrow;
var
center_x, center_y : integer;
begin
center_x := Round(Width/2);
center_y := Round(Height/2);
Canvas.Pen.Color := RGB(0, 0, 0);
Canvas.MoveTo(center_x, center_y-Round(Height/4));
Canvas.LineTo(center_x, Round(Height)-Round(Height/4));
Canvas.Pen.Color := RGB(0, 0, 0);
Canvas.MoveTo(Round(Width/2)-Round(Width/4), center_y);
Canvas.LineTo(Round(Width)-Round(Width/4), center_y);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, x, y : integer;
center_x, center_y : integer;
begin
DrawArrow;
center_x := Round(Width/2);
center_y := Round(Height/2);
x := -100;
y := Round(0.02-0.05*x);
Canvas.Pen.Color := RGB(255, 2, 2);
Canvas.MoveTo(center_x+x, center_y+y);
for i:=-100 to 100 do
begin
x := i;
y := Round(0.02-0.05*x);
Canvas.LineTo(center_x+x, center_y+y);
end;
end;
end.

مصطفی ساتکی
سه شنبه 04 خرداد 1389, 13:55 عصر
جناب tdkhakpur (http://barnamenevis.org/forum/member.php?u=99732) با همون تفنگ crt که می گفتید کدو بنویسید تا دیگران استفاده کنند از کتاب مایکل تیشر .!!
شما عملاً با این کارتون یه دوجین توابع Api مایکروسافت مربوط به Coordinate رو در نظر نگرفت به MSDN به بخش Coordinate و CAD مراجعه کنید.

tdkhakpur
سه شنبه 04 خرداد 1389, 14:11 عصر
جناب tdkhakpur (http://barnamenevis.org/forum/member.php?u=99732) با همون تفنگ crt که می گفتید کدو بنویسید تا دیگران استفاده کنند از کتاب مایکل تیشر .!!
شما عملاً با این کارتون یه دوجین توابع Api مایکروسافت مربوط به Coordinate رو در نظر نگرفت به MSDN به بخش Coordinate و CAD مراجعه کنید.
شما هم مثل اینکه یه چیزیتون میشه ها!!!!
با crt چی بنویسم خب عزیز برو کتابه رو بگیر بخون واسه چی خودت رو اذیت میکنی؟
در ضمن شما بحث از برنامه نویسی کرید و توابع را آنچنان توضیح دادید که انگار بحر علم تشریف دارید نوبت شماست که به
http://barnamenevis.org/forum/showpost.php?p=990581&postcount=17
عمل کنید من ادعایی برای اینکه دیگران لاف میزنن نداشتم شما بصورت


آقایون چیزی نمیدونن چرا نظر میدند

را ارائه نمودید.
حالا من با crt کد را بنویسم اونوفت چی میشه بهم 20 میدی؟

Mask
سه شنبه 04 خرداد 1389, 14:48 عصر
ممنون از دوستان
برای بار چندمین بار خواهش میکنم که کل کل نکنید.(حیفه این پست قفل بشه)
دوست عزیز Delphi_CAT (http://barnamenevis.org/forum/member.php?u=37538) ، اگه محبت کنید و نمونه کدی رو قرار بدید.
با توجه به اینکه شما متخصص پردازش تصویر هستید، فکر میکنم خیلی حرف برا گفتن داشته باشید.
واقعا لذت بخشه هم صحبتی با عزیزان و دوستانی چون شما.

مصطفی ساتکی
سه شنبه 04 خرداد 1389, 15:30 عصر
جناب Delphi-7 (http://barnamenevis.org/forum/member.php?u=74166) کاری که شما می خواستید رو به صورت شفاف در پست های قبلی توضیح دادم و چیزی نداره که بخایم روش انحطافی به خرج بدم.اینجا جای کل کل نیست و اینو میدونم و من هم قصد همچین کاری رو ندارم.دوستان به سوالی که شما پرسیدید جواب های نادرست دادن. و شما هم در پستون فرمودید که ادامه ندید .من به شخصه خودم چیزی رو که نمی دونم در اون مورد نظر نمی دم.جناب tdkhakpur (http://barnamenevis.org/forum/member.php?u=99732) از اون طرف ادعایی میکنه بعدش یه سورسی میزاره مثل سورس بالا.خوب این سورس چی بشه اولا همین سورسی که ایشون زحمتشو کشیدن هدف این تاپیک نیست هر چیزی اصولی داره .ایشون در پست اولیشون گفتند فلان کارو با تفنگ انجام میدن چرا انجام ندادن.بعد فرمایش می کنند اگه انجام بدم به من 20 میدید.مگه این سورسی رو که در بالا گذاشتن کسی به ایشون 20 داد. من شغلم پردازش تصویر و اینکارو به صورت تخصصی دنبال می کنیم این سوالی هم که شما فرمودید همون که ذکر کردم بحث CAD و مبحث Coordinate .
از کلیه دوستان دوباره اگر کسی از دستم ناراحتن بازهم معذرت میخام و روشونو میبوسم