Допустимо изменить символы строк аргумента . C11 5.1.2.2.1p2
Параметры
blockquote>argc
иargv
и строки, на которые указывает массивargv
, должны изменяться программой и сохранять их последние сохраненные значения между запуском программы и завершением программы.До сих пор не разрешен доступ к массиву за пределами,
argv
будет иметь только толькоargc + 1
элементов, не так много, как вы пытаетесь туда вставить. .
Если я понимаю Ваше право вопроса:
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)?
Это - основная суть математики позади вращений, как бы то ни было.
править: ага, я не понял, что они были оценками. (достаточно близкий к тому, чтобы быть реалистичным, хотя!)
Взгляд на GeneralTransform. TransformBounds () метод.
Я использую этот метод:
Point newPoint = rotateTransform.Transform(new Point(oldX, oldY));
где rotateTransform - это экземпляр, над которым я работаю и устанавливаю Angle ... и т. д.
Я не уверен, но являюсь этим, что Вы ищете - вращение точки в Декартовой системе координат: ссылка
Можно использовать, Преобразовывают. Преобразуйте () метод на своей Точке с теми же преобразованиями для понимания новой мысли, к которой были применены эти преобразования.