Вращение линии за произвольную точку - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы