Member 13475664 Ответов: 3

Нарисовать кривую clothoid в форме windows


Мне нужно нарисовать кривую clothoid на панели, но значения координат колеблются от -1 до 1 из-за функции cos и sin. Может ли кто-нибудь сказать мне, как преобразовать размер панели так, чтобы я мог нарисовать кривую clothoid и визуализировать кривую в координатах x и y в диапазоне от -1 до 1.

[Обновление]
Спасибо за ваше предложение, есть ли какой-нибудь способ увеличить размер пикселя или координат. потому что я хочу, чтобы от -1 до 0 и от 0 до 1 были широко видны, чтобы я мог нарисовать кривую.
[/Обновление]

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

TranslateTransform и multipletransform а также используется метод PointToClient но он не работает

CPallini

- Спасибо за ваше предложение, есть ли какой-нибудь способ увеличить размер пикселя или координаты. потому что я хочу, чтобы от -1 до 0 и от 0 до 1 были широко видны, чтобы я мог нарисовать кривую"
Вы не должны ничего увеличивать. Просто примените преобразование, показанное в моем решении: оно отображает(-1,-1)-(+1,+1) квадрат, чтобы сформировать прямоугольник.

3 Ответов

Рейтинг:
2

phil.o

Вы можете применить функцию масштабирования/смещения к значениям x и Y.

// We have f() -> (x, y)
// x Є [-1, 1], y Є [-1, 1]

double x, y; // These variables have their values assigned by the function

double width = panel.Width / 2d;
double height = panel.Height / 2d;

// Scale x in the range [-width / 2, width / 2]
double newX = x * width; 
// Bias x in the range [0, width]
newX += width;

// Similarly

// Scale y in the range [-height / 2, height / 2]
double newY = y * height;
// Bias y in the range [0, height]
newY += height;

Если ваша панель не квадратная и вы не хотите, чтобы результирующая кривая была искажена, то вам нужно выбрать наименьший из двух факторов ширины и высоты и использовать его в качестве коэффициента масштабирования для x и y.

Надеюсь, это поможет. Любезно.


Рейтинг:
1

CPallini

Ну, это не ракетостроение: вы должны перевести и масштабировать свое изображение (инвертируя также ось y).
Предположим, что ваша область краски имеет координаты: top-left = {X0,Y0}, bottom-right {X1,Y1} затем

xf = X0 + (x + 1) * (X1 - X0) / 2
yf = Y1 - (y + 1) * (Y1 - Y0) / 2
Где {x,y} является вычисленной точкой клотоида и {xf,yf} его превратили двоюродный брат.


Рейтинг:
1

Member 13475664

Спасибо за ваше предложение, есть ли какой-нибудь способ увеличить размер пикселя или координат. потому что я хочу, чтобы от -1 до 0 и от 0 до 1 были широко видны, чтобы я мог нарисовать кривую.


Patrice T

Не используйте решение, чтобы прокомментировать или задать другой вопрос.
Чтобы обсудить с автором, если решение есть, используйте "есть вопрос или комментарий?" в нижней части решения. Преимущество, автор получает уведомление.
или использовать Улучшить вопрос чтобы обновить ваш вопрос.