mashali Ответов: 2

Вращение многоугольника вокруг центра


привет У меня есть массив точек, который образует многоугольник. как я могу вращать многоугольник вокруг его центра?

Что я уже пробовал:

Public Function RotatePoints(_Points() As Point, _CenterPoint As Point, _Degree As Double) As Point()
    Dim Output() As Point = _Points.Clone()

    Dim Angle As Double = (_Degree / 180.0) * Math.PI
    For Index As Integer = 0 To Output.Length - 1
        Output(Index) = New Point((Math.Cos(Angle) * (Output(Index).X - _CenterPoint.X)) + _CenterPoint.X, (Math.Sin(Angle) * (Output(Index).Y - _CenterPoint.Y)) + _CenterPoint.Y)
    Next

    Return Output
End Function

Kornfeld Eliyahu Peter

пункт за пунктом?

mashali

спасибо. проблема решена, мой алгоритм был неправильным.

2 Ответов

Рейтинг:
4

mashali

Особая благодарность OriginalGriff

Public Function RotatePoints2(_Points() As Point, _CenterPoint As Point, _Degree As Double) As Point()
    Dim Output() As Point = _Points.Clone()

    Dim Angle As Double = (_Degree / 180.0) * Math.PI
    For Index As Integer = 0 To Output.Length - 1
        Dim Dx As Integer = (Output(Index).X - _CenterPoint.X)
        Dim Dy As Integer = (Output(Index).Y - _CenterPoint.Y)
        Output(Index).X = (Math.Cos(Angle) * Dx) - (Math.Sin(Angle) * Dy) + _CenterPoint.X
        Output(Index).Y = (Math.Sin(Angle) * Dx) + (Math.Cos(Angle) * Dy) + _CenterPoint.Y
    Next

    Return Output
End Function


Рейтинг:
20

OriginalGriff

Просто: ваш алгоритм ошибочен.
Видеть здесь: Геометрические Операции - Поворот[^]

Я бы предложил вам "разбить" каждую координату на отдельный набор строк, заставить X работать - очевидно, использовать отладчик для проверки - и затем повторить для Y. Когда оба работают, объедините отдельные стадии X и Y в единую линию и создайте свою новую точку.


mashali

Спасибо OriginalGriff
своя работа :)

OriginalGriff

Всегда пожалуйста!