PDA

View Full Version : زاویه بین دو خط



Reza,M
جمعه 25 فروردین 1391, 13:51 عصر
با سلام
مثلا من با این کد دو خط رسم میکنم
x = 100 : y = 50
x1 = 150 : y1 = 10 : x2 = 200 : y2 = 50
g.DrawLine(Pens.Black, x, y, x1, y1)
g.DrawLine(Pens.Black, x1, y1, x2, y2)

حال اگه بخوام به کمک زاویه همین خط ها رو رسم کنم چطور باید عمل کرد

فکر کنم با فرمول زیر بشه ولی نمیدونم چرا عمل نمی کنه

r = deg * PI / 180
x2 = x + (x1 - x) * Cos(r) - (y1 - y) * Sin(r)
y2 = y + (x1 - x) * Sin(r) + (y1 - y) * Cos(r)

hakim22
جمعه 25 فروردین 1391, 17:46 عصر
دوست من شما باید از فرمولهای تبدیل مختصات دکارتی به قطبی استفاده کنید :
x=r*cos(theta)
y=r*sin(theta)

هندسه ی تحلیلی !

en-keramat
جمعه 25 فروردین 1391, 18:36 عصر
دوست من شما باید از فرمولهای تبدیل مختصات دکارتی به قطبی استفاده کنید :
x=r*cos(theta)
y=r*sin(theta)

هندسه ی تحلیلی !
که با جمع کردن رابطه بالا با مختصات نقطه قبلی ، مختصات نقطه جدید محاسبه میشه

x=X1+r*cos(theta)
y=Y1+r*sin(theta)
g.DrawLine(Pens.Black, x, y, x1, y1

Reza,M
جمعه 25 فروردین 1391, 19:07 عصر
دوستان جواب نمیده ؟؟

hakim22
جمعه 25 فروردین 1391, 22:13 عصر
عزیز من ما گفتیم فرمولش اونه ، دیگه نه اینکه شما عینشو بنویسید !
برای رسم هم خط دو نقطه لازمه
برای هر نقطه دو مجهول داریم.
مختصات x و مختصات y
فرض می کنیم شما نقطه مبدا رو دارید
یعنی ابتدای خط مشخص است.
برای پیدا کردن نقطه ی دوم باید از فرمول بالا استفاده کنید. درضمن حتما باید محاسبات رو به integer تبدیل کنید.

لطفا وقتی برنامه به هر دلیلی اجرا نمیشه متن کامل کدی که نوشتید و خطایی که دریافت کردید یا مشکلی که داره رو هم شرح بدید . فقط غر زدن که کاری از پیش نمیبره !!!

Reza,M
جمعه 25 فروردین 1391, 22:24 عصر
عزیز من ما گفتیم فرمولش اونه ، دیگه نه اینکه شما عینشو بنویسید !
برای رسم هم خط دو نقطه لازمه
برای هر نقطه دو مجهول داریم.
مختصات x و مختصات y
فرض می کنیم شما نقطه مبدا رو دارید
یعنی ابتدای خط مشخص است.
برای پیدا کردن نقطه ی دوم باید از فرمول بالا استفاده کنید. درضمن حتما باید محاسبات رو به integer تبدیل کنید.

لطفا وقتی برنامه به هر دلیلی اجرا نمیشه متن کامل کدی که نوشتید و خطایی که دریافت کردید یا مشکلی که داره رو هم شرح بدید . فقط غر زدن که کاری از پیش نمیبره !!!

چشم دوست من
فقط اگه ممکنه یه نمونه برام بزار
آخه اولا با زاویه مشکل دارم و اون زاویه مورد نظرم که در پست اول مقادیر عددی بهش دادم رو بدست نمیارم (هرچند زاویه رو هم به رادیان تبدیل کردم) دوما برای خط های متمادی که دیگه کاملا خطوط باهم قاطی میشن

en-keramat
جمعه 25 فروردین 1391, 22:58 عصر
Imports System.Math
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim angle As Double = (TextBox1.Text * PI) / 180
Dim distance As Integer = 100
Dim X1 As Integer, Y1 As Integer
Dim X2 As Integer, Y2 As Integer
X1 = 0
Y1 = 0
X2 = X1 + distance * Cos(angle)
Y2 = Y1 + distance * Sin(angle)

Dim pen1 As New Pen(Color.Black)
Dim g As Graphics

g = Me.CreateGraphics

g.DrawLine(pen1, X1, Y1, X2, Y2)

End Sub
End Class

من یه فرم ساده به این شکل درست کردم
85714

Reza,M
جمعه 25 فروردین 1391, 23:46 عصر
دوست من منظورم اینطوری نبوده من اینطور ترسیم ها رو با کد زیر انجام میدم

Imports System.Math
Public Class Form1
Dim g As Graphics
Dim r As Double
Dim x1, x2, y1, y2, x3, y3 As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
r = (45 * PI) / 180
x1 = 100
x2 = 200
y1 = 100
y2 = 100
g = Me.CreateGraphics()
g.DrawLine(Pens.Black, x1, y1, x2, y2)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
x3 = x1 + (x2 - x1) * Cos(r) - (y2 - y1) * Sin(r)
y3 = y1 + (x2 - x1) * Sin(r) + (y2 - y1) * Cos(r)
g.DrawLine(Pens.Black, x1, y1, x3, y3)
x2 = x3
y2 = y3
End Sub
End Class

در کل چطور میتونیم یک 5ضلعی منتظم رو با این روش انجام بدیم

en-keramat
شنبه 26 فروردین 1391, 00:35 صبح
در کل چطور میتونیم یک 5ضلعی منتظم رو با این روش انجام بدیم

ببین دوست عزیز من روابط ریاضی اشو میگم ، با همون روشی هم که گفته شد می تونی کد اش کنی

هر چند ضعلی که باشه ، چون اینجا 5 ضعلی داریم
360 نقسیم بر 5 میکنی که 72 درجه بدست میاد ، که برای قاچ از 5 ضعلی میشه
حالا می تونی با داشتن مختصات مرکز 5 ضلعی و شعاع آن ( که میتونی از کاربر بگیری ) ، مختصات تک ، تک اضلاع محاسبه کنی
مثلا فرض کن ما یه 5 ضعلی به مرکز 200,200 و به شعاع 50 داریم میتونه روابط اش اینطوری باشه

x1=200+50*cos(72)
y1=200+50*sin(72)
-------------------------
x2=200+50*cos(144)
y2=200+50*sin(144
-----------------------
x3=200+50*cos(216)
y3=200+50*sin(216)
-------------------------
x4=200+50*cos(288)
y4=200+50*sin(288
------------------------
x5=200+50*cos(360)
y5=200+50*sin(360)

Reza,M
شنبه 26 فروردین 1391, 01:49 صبح
والا این مختصات 5ظلعی نمیشه ؟ :ناراحت:
یه چیز مثل شکل زیر میخوام

Reza,M
شنبه 26 فروردین 1391, 01:52 صبح
دوست من اگه لطف کنی و کد کامل رو بزاری ممنون میشم
این تیکه کد خودم رو هم خسته کرده :عصبانی++:

en-keramat
شنبه 26 فروردین 1391, 02:20 صبح
والا این مختصات 5ظلعی نمیشه ؟ :ناراحت:
یه چیز مثل شکل زیر میخوام

دوست عزیز اینکه پنج ضلعی منظم نیست ، این فرمول که نوشتم مثل دستور polygon اتوکد میتونه باشه که مختصات مرکز و شعاع بگیر و پنج ضلعی ترسیم کنه

شکلی که شما دارید از ترکیب یک مثلث و مربع ساخته شده ، مختصات دهی شکل اتون باید چطوری باشه ؟ منظورم اینکه باید ورودی ها چی باشه ؟ ( از کاربر گرفته میشه ؟) و یا شکل با مختصات ثابت هستش :بامزه:

Reza,M
شنبه 26 فروردین 1391, 09:55 صبح
مختصات دهی شکل اتون باید چطوری باشه ؟ منظورم اینکه باید ورودی ها چی باشه ؟ ( از کاربر گرفته میشه ؟) و یا شکل با مختصات ثابت هستش :بامزه:
آره مختصات شکل ثابت است..

en-keramat
شنبه 26 فروردین 1391, 11:58 صبح
آره مختصات شکل ثابت است..

این شکلی که گذاشتی بر اساس این یکم روابط اش پیچیده میشه ، که از فرمولهای قبلا توضیح دادم ، راحتر ترسیم میشه :لبخندساده: این کدی که خواستی :ناراحت:

Imports System.Math
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'Dim angle As Double = (60 * PI) / 180
Dim Radius As Integer = 50
Dim Xcent As Integer, Ycent As Integer
Dim X1 As Integer, Y1 As Integer
Dim X2 As Integer, Y2 As Integer
Dim X3 As Integer, Y3 As Integer
Dim X4 As Integer, Y4 As Integer
Dim X5 As Integer, Y5 As Integer
'X1 = 0
'Y1 = 0
'X2 = X1 + distance * Cos(angle)
'Y2 = Y1 + distance * Sin(angle)
Xcent = 200
Ycent = 200
'''''''''''''''''''''''''''''''''''''''''''
X1 = 200 + 50 * Cos((72 * PI) / 180)
Y1 = 200 + 50 * Sin((72 * PI) / 180)
'------------------------
X2 = 200 + 50 * Cos((144 * PI) / 180)
Y2 = 200 + 50 * Sin((144 * PI) / 180)
' -----------------------
X3 = 200 + 50 * Cos((216 * PI) / 180)
Y3 = 200 + 50 * Sin((216 * PI) / 180)
'-------------------------
X4 = 200 + 50 * Cos((288 * PI) / 180)
Y4 = 200 + 50 * Sin((288 * PI) / 180)
' ------------------------
X5 = 200 + 50 * Cos((360 * PI) / 180)
Y5 = 200 + 50 * Sin((360 * PI) / 180)

''''''''''''''''''''''''''''''''''''''''''
Dim pen1 As New Pen(Color.Black)
Dim g As Graphics

g = Me.CreateGraphics

g.DrawLine(pen1, X1, Y1, X2, Y2)
g.DrawLine(pen1, X2, Y2, X3, Y3)
g.DrawLine(pen1, X3, Y3, X4, Y4)
g.DrawLine(pen1, X4, Y4, X5, Y5)
g.DrawLine(pen1, X5, Y5, X1, Y1)


End Sub
End Class

خروجی اش هم به این شکل میشه :بامزه:
85735