Вращение точки о другой (2D) точке

Это не пример Python, но в языке программирования D термин mixin используется для ссылки на конструкцию, используемую почти одинаково; добавив кучу вещей в класс.

В D (который, кстати, не делает MI) это делается путем вставки шаблона (думаю, что синтаксически осведомленные и безопасные макросы и вы будете близки) в область. Это позволяет использовать одну строку кода в классе, структуре, функции, модуле или любом другом, чтобы расширять любое количество объявлений.

122
задан dirkgently 13 February 2010 в 23:15
поделиться

2 ответа

Сначала вычтите точку поворота (cx,cy), затем поверните ее, затем снова прибавьте точку.

Не проверено:

POINT rotate_point(float cx,float cy,float angle,POINT p)
{
  float s = sin(angle);
  float c = cos(angle);

  // translate point back to origin:
  p.x -= cx;
  p.y -= cy;

  // rotate point
  float xnew = p.x * c - p.y * s;
  float ynew = p.x * s + p.y * c;

  // translate point back:
  p.x = xnew + cx;
  p.y = ynew + cy;
  return p;
}
298
ответ дан 24 November 2019 в 01:18
поделиться

Это - ответ Nils Pipenbrinck, но реализованный в скрипке c#.

https://dotnetfiddle.net/btmjlG

using System;

public class Program
{
    public static void Main()
    {   
        var angle = 180 * Math.PI/180;
        Console.WriteLine(rotate_point(0,0,angle,new Point{X=10, Y=10}).Print());
    }

    static Point rotate_point(double cx, double cy, double angle, Point p)
    {
        double s = Math.Sin(angle);
        double c = Math.Cos(angle);
        // translate point back to origin:
        p.X -= cx;
        p.Y -= cy;
        // rotate point
        double Xnew = p.X * c - p.Y * s;
        double Ynew = p.X * s + p.Y * c;
        // translate point back:
        p.X = Xnew + cx;
        p.Y = Ynew + cy;
        return p;
    }

    class Point
    {
        public double X;
        public double Y;

        public string Print(){
            return $"{X},{Y}";
        }
    }
}

пз: По-видимому, я комментарий can’t, таким образом, I’m, обязанный отправить его как ответ...

1
ответ дан 24 November 2019 в 01:18
поделиться