WPF: Получение новых координат после Вращения

Допустимо изменить символы строк аргумента . C11 5.1.2.2.1p2

Параметры argc и argv и строки, на которые указывает массив argv, должны изменяться программой и сохранять их последние сохраненные значения между запуском программы и завершением программы.

blockquote>

До сих пор не разрешен доступ к массиву за пределами, argv будет иметь только только argc + 1 элементов, не так много, как вы пытаетесь туда вставить. .

13
задан Community 23 May 2017 в 12:00
поделиться

5 ответов

Если я понимаю Ваше право вопроса:

given:
shape has corner (x1,y1), center (xc,yc)
rotated shape has corner (x1',y1') after being rotated about center

desired:
how to map any point of the shape (x,y) -> (x',y') by that same rotation

Вот соответствующие уравнения:

(x'-xc) = Kc*(x-xc) - Ks*(y-yc)
(y'-yc) = Ks*(x-xc) + Kc*(y-yc)

где Kc=cos(theta) и Ks=sin(theta) и theta угол против часовой стрелки вращения. (для проверки: если theta=0, это оставляет координаты без изменений, иначе если xc=yc=0, он отображается (1,0) на (cos (тета), тета sin()) и (0,1) к (-тета sin(), because(тета)). Протест: это для систем координат, где (x, y) = (1,1) находится в верхнем правом квадранте. Для Вашего, где это находится в нижнем правом квадранте, тета была бы углом по часовой стрелке вращения, а не против часовой стрелки вращения.)

Если бы Вы знаете, что координаты Вашего прямоугольника, выровненного с x-y осями, xc, просто были бы средним числом этих двух x-координат, и yc просто будет средним числом этих двух y-координат. (в Вашей ситуации это - xc=75, yc=85.)

Если Вы знаете тету, у Вас теперь есть достаточно информации для вычисления новых координат. Если Вы не знаете тету, можно решить для Kc, Канзас. Вот соответствующие вычисления для Вашего примера:

(62-75) = Kc*(50-75) - Ks*(50-85)
(40-85) = Ks*(50-75) + Kc*(50-85)

-13 = -25*Kc + 35*Ks = -25*Kc + 35*Ks
-45 = -25*Ks - 35*Kc = -35*Kc - 25*Ks

который является системой линейных уравнений, которые могут быть решены (осуществление для читателя: в MATLAB это:

[-25 35;-35 -25]\[-13;-45]

привести, в этом случае, к Kc=1.027, Ks=0.3622, который НЕ имеет смысла (K2 = Kc2 + Ks2, как предполагается, равняется 1 для чистого вращения; в этом случае это - K = 1.089), таким образом, это не чистое вращение вокруг прямоугольного центра, который является тем, на что указывает Ваш рисунок. И при этом это, кажется, не чистое вращение вокруг источника. Для проверки сравните расстояния от центра вращения прежде и после вращения с помощью Теоремы Пифагора, d2 = deltax2 + deltay2. (для вращения вокруг xc=75, yc=85, расстояние прежде 43.01, расстояние после того, как 46.84, отношение является K=1.089; для вращения вокруг источника расстояние прежде 70.71, расстояние после того, как 73.78, отношение 1.043. Я мог полагать, что отношения 1.01 или меньше явятся результатом координаты, округляющейся к целым числам, но это ясно больше, чем ошибка округления),

Таким образом, существует некоторая недостающая информация здесь. Как Вы получали числа (62,40)?

Это - основная суть математики позади вращений, как бы то ни было.

править: ага, я не понял, что они были оценками. (достаточно близкий к тому, чтобы быть реалистичным, хотя!)

15
ответ дан 1 December 2019 в 21:12
поделиться

Взгляд на GeneralTransform. TransformBounds () метод.

3
ответ дан 1 December 2019 в 21:12
поделиться

Я использую этот метод:

Point newPoint = rotateTransform.Transform(new Point(oldX, oldY));

где rotateTransform - это экземпляр, над которым я работаю и устанавливаю Angle ... и т. д.

7
ответ дан 1 December 2019 в 21:12
поделиться

Я не уверен, но являюсь этим, что Вы ищете - вращение точки в Декартовой системе координат: ссылка

1
ответ дан 1 December 2019 в 21:12
поделиться

Можно использовать, Преобразовывают. Преобразуйте () метод на своей Точке с теми же преобразованиями для понимания новой мысли, к которой были применены эти преобразования.

1
ответ дан 1 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: