У меня есть эта формула в функции ниже.Это довольно простая концепция, но эта формула заняла у меня почти 2 недели, чтобы стать идеальной.То, что он делает, вычисляет, в какую точку поместить объект на заданной степени вокруг и на расстоянии от центральной точки.Это полезно для рисования кругов вручную, а также я в первую очередь использую его для моей иглы.Он вычисляет, где нарисовать иглу.
Теперь я пытаюсь выяснить, как изменить эту формулу, чтобы учесть овалы или эллипсы.Я подумал об идее сначала нарисовать компонент круглой формы, а затем растянуть его после того, как все нарисовано, но это не чистое решение, так как чертеж, который я делаю, уже будет в форме овала.
Мне нужно добавить только один параметр в эту функцию, чтобы указать соотношение между шириной / высотой, чтобы он знал, как сместить эту точку.По умолчанию этот параметр должен быть равен 1, что означает ширину = высоту, что означает отсутствие овального рисунка или смещения.Но предположим, что я поставил 2, что означает, что ширина в два раза больше высоты, или 1,5 будет означать, что ширина в 1,5 раза больше высоты.
Вот исходная функция:
function NewPosition(Center: TPoint; Distance: Integer; Degrees: Single): TPoint;
var
Radians: Real;
begin
//Convert angle from degrees to radians; Subtract 135 to bring position to 0 Degrees
Radians:= (Degrees - 135) * Pi / 180;
Result.X:= Trunc(Distance*Cos(Radians)-Distance*Sin(Radians))+Center.X;
Result.Y:= Trunc(Distance*Sin(Radians)+Distance*Cos(Radians))+Center.Y;
end;
Здесьэто с добавленным параметром, который мне нужен:
function NewPosition(Center: TPoint; Distance: Integer; Degrees: Single;
OvalOffset: Single = 1): TPoint;
var
Radians: Real;
begin
//Convert angle from degrees to radians; Subtract 135 to bring position to 0 Degrees
Radians:= (Degrees - 135) * Pi / 180;
Result.X:= Trunc(Distance*Cos(Radians)-Distance*Sin(Radians))+Center.X;
Result.Y:= Trunc(Distance*Sin(Radians)+Distance*Cos(Radians))+Center.Y;
end;
ОПРЕДЕЛЕНИЯ:
- Центр = Центральная точка, на которой будут основаны вычисления (центр эллипса)
- Дистанция = Как далеко от центра в любом направлении, независимо от градусов
- Градусов = Сколько градусов вокруг центральной точки, начиная с верхних правых
- OvalOffset = Коэффициент разницы междуШирина и высота