Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Повернуть точку вокруг вектора на заданный угол.

Андрей Журавлев Мастер (2171), на голосовании 3 недели назад
Вопрос больше по тригонометрии, чем по программированию, но все же.
Есть такой метод:
     public static Point3D GetPoint(Point3D center, Vector3D direction, Point3D point, double angle) 
{
var matrix = new Matrix3D();
matrix.RotateAt(new Quaternion(direction, angle), center);
return matrix.Transform(point);
}
Как можно получить тот же результата, но без матрицы а используя только синусы/косинусы и т.п.?
Голосование за лучший ответ
SK Мыслитель (5351) 1 месяц назад
const
c1=16;
c2=24;

a:=a*Pi/180;
for i := 0 to Image2.Height-1 do begin
for j := 0 to Image2.Width-1 do begin
rr := sqrt(sqr(i - c1) + sqr(j - c1));
SinCos(a + arctan2((j - c1), (i - c1)), s, cr);
cl := ImgBack.Canvas.Pixels[
round(c2 + rr * cr), round(c2 + rr * s)];
Image2.Canvas.Pixels[i,j] := cl;
end;
end;
r := GetChildrenRect(false);
Canvas.StretchDraw(r,image2);

a - угол поворота
Похожие вопросы