Вращение линии за произвольную точку - Visual Basic .NET
Формулировка задачи:
Привет. Как повернуть на определенный угол линию? Центр вращения - произвольная точка на этой линии.
Решение задачи: «Вращение линии за произвольную точку»
textual
Листинг программы
- Public Class Form4
- Private blackPen As Pen
- Private colorPen As Pen
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
- Dim ln As New myLine(New PointF(10, 10), New PointF(100, 100))
- Dim ln2 As myLine = ln.RotateAtPoint(New PointF(50, 50), CDbl(TextBox1.Text))
- blackPen = New Pen(Color.Black, 2)
- colorPen = New Pen(Brushes.Red, 2)
- Dim gg As Graphics = Panel1.CreateGraphics
- gg.Clear(Panel1.BackColor)
- gg.DrawLine(blackPen, ln.P1, ln.P2)
- gg.DrawLine(colorPen, ln2.P1, ln2.P2)
- End Sub
- End Class
- Public Class myLine
- Public Sub New(ByVal pp1 As PointF, ByVal pp2 As PointF)
- _P1 = pp1
- _P2 = pp2
- End Sub
- Public Property P1 As PointF
- Public Property P2 As PointF
- Public Function RotateAtPoint(ByVal pp As PointF, ByVal ang As Double) As myLine
- 'ang в градусах, положительное вращение против час. стрелки
- Dim angR As Double = ang * Math.PI / 180
- Dim sn As Double = Math.Sin(angR)
- Dim cs As Double = Math.Cos(angR)
- Dim ppn1 As New PointF, ppn2 As New PointF
- ppn1.X = pp.X + (P1.X * cs + P1.Y * sn) - (pp.X * cs + pp.Y * sn)
- ppn1.Y = pp.Y + (-P1.X * sn + P1.Y * cs) - (-pp.X * sn + pp.Y * cs)
- ppn2.X = pp.X + (P2.X * cs + P2.Y * sn) - (pp.X * cs + pp.Y * sn)
- ppn2.Y = pp.Y + (-P2.X * sn + P2.Y * cs) - (-pp.X * sn + pp.Y * cs)
- Return New myLine(ppn1, ppn2)
- End Function
- End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д