PDA

View Full Version : سوال: رسم خط با داشتن نقطه اول و طول و زاویه



mehrdad1261
جمعه 15 آذر 1387, 00:56 صبح
سلام دوستان
میخواستم یه خط بکشم که مثلا نقطه اول (x1,y1(100,100) و طول 10 و زاویه 30 درجه.
حالا باید نقطه دوم رو پیدا کرد ؟
دوستان تا یه جاهایی کار را کردم ولی جواب نداده.
اگه کمک کنین ممنون می شم.
چند تا فرمول هم دارم که برای طول خط هست . شاید کمکمون کنه.
طول خط : T=sqrt((x2-x1)^2+(y2-y1)^2)
شیب خط : y2-y1=m(x2-x1)

shask00l
جمعه 15 آذر 1387, 02:02 صبح
من در این مورد اطلاعات زیادی ندارم . قدیما 1 خورده روی این موضوع فکر کرده بودم.

در درجه اول اینکه طول خط = 10 یعنی چی ؟ 10 پیکسل 10 سانت 10 متر 10.....
نکته دوم اینه که شما نمیتونید مستقیما به vb بگید که این زاویه رو بگیر 10 سانت برو جلو . باید دقیقا آدرس مقصد مشخص باشد .

پیشنهادی که میدم اینه که روی معادلات خط و اینجور چیزا بیشتر کار کنید . با توجه به زاویه و طول میشه روی محور مختصات به راحتی ابتدا و انتهای خط رو بدست آورد . بقیه کارها رو هم به کلاس drawing بسپارید .

ضمنا ممکنه توی همین کلاس امکانی برای این کار در نظر گرفته شده باشه . از مایکروسافت بعید نیست . 1 نگاهی بندازید .
اگر باز هم موفق نشدید . 1سری به codeproject بزنید . به اندازه موهای سر من توش library اماده برای کارهای گرافیکی داره .

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

mehrdad1261
جمعه 15 آذر 1387, 04:01 صبح
اول - طول خط مهم نیست از چه واحدی باشه
دوم - اینو که نمیشه مستقیم آدرس داد رو میدونستم و روی معادلات خط زیاد کار کردم اما جواب خودم رو نگرفتم.
سوم - تو اینترنت خیلی دنبالش رفتم پیداش نکردم . شاید به خاطر اینکه انگلیسی درست و حسابی بلد نیستم نتونستم گیر بیارم (اگه راهنمایی کنین که چی رو باید سرچ کنم ممنون میشم)
از تبریکتون بسیار ممنون

MohsenPS
جمعه 15 آذر 1387, 08:28 صبح
سلام،
فرض کنیم مختصات نقطه اولیه شما (x1,y1) باشه و میخواهید خطی به طول L و با زاو یه u (برحسب درجه) داشته باشید ، همو نطور که میدو نین کافیه مختصات نقطه انتهایی رو بدست بیارید. قطعه کد زیر مختصات نقطه دوم رو در متغیرهای x2 و y2 برمی‌گردونه :


Dim T As Double = Math.Tan(u * Math.PI / 180)
Dim C As Double = Math.Cos(u * Math.PI / 180)

Dim X2 As Integer = Math.Round(X1 + Math.Sign(C) * L / Math.Sqrt(1 + T ^ 2))
Dim Y2 As Integer = Math.Round(Y1 - Math.Sign(C) * L * T / Math.Sqrt(1 + T ^ 2))