Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Внизповорот RECT Найти похожие ветки
← →
Ms-R (2010-04-04 11:14) [0]Уважаемые мастера.
Скажите как повернуть RECT на угол.
RECT задается через (a,b,c,d).
Например А(100,100,200,300) на 45 градусов.
На выходе В(a,b,c,d).
Спасибо.
← →
DVM © (2010-04-04 11:25) [1]Относительно чего повернуть?
← →
{RASkov} © (2010-04-04 11:29) [2]> [0] Ms-R (04.04.10 11:14)
> Например А(100,100,200,300)
тут указаны две точки(верх/лев и низ/прав)
> На выходе В(a,b,c,d).
с двумя точками рект стандартно(или стандартный рект) не повернешь...
если его(рект) нужно нарисовать, то можно, например, повернуть канву или рект рисовать "не стандартно" т.е. другими стандартными функциями, например Polyline/Polygon....
← →
_avenger_ (2010-04-04 11:48) [3]Недавно решал такую задачу:
procedure PointRotate(var APoints: array of TPoint; const AOrigin: TPoint; const AAngle: Extended; const AStartIndex: Integer = 0);
var
i, x, y: Integer;
AACos, AASin: Extended;
begin
AACos := Cos(AAngle);
AASin := Sin(AAngle);
for i := AStartIndex to High(APoints) do
begin
x := APoints[i].X - AOrigin.X;
y := APoints[i].Y - AOrigin.Y;
APoints[i].X := Round( (x * AACos) - (y * AASin) ) + AOrigin.X;
APoints[i].Y := Round( (x * AASin) + (y * AACos) ) + AOrigin.Y;
end;
end;
function RectRotate(const ARect: TRect; const AAngle: Extended): TRect;
var
APoints: array [0..3] of TPoint;
begin
with ARect do
begin
APoints[0] := Point(Left, Top);
APoints[1] := Point(Right, Top);
APoints[2] := Point(Right, Bottom);
APoints[3] := Point(Left, Bottom);
end;
PointRotate(APoints, APoints[0], -AAngle, 0);
end;
← →
_avenger_ (2010-04-04 11:52) [4]Надо еще дописать:
PointRotate(APoints, APoints[0], -AAngle, 0);
with Result do
begin
Left := MinIntValue([APoints[0].X, APoints[1].X, APoints[2].X, APoints[3].X]);
Top := MinIntValue([APoints[0].Y, APoints[1].Y, APoints[2].Y, APoints[3].Y]);
Right := MaxIntValue([APoints[0].X, APoints[1].X, APoints[2].X, APoints[3].X]);
Bottom := MaxIntValue([APoints[0].Y, APoints[1].Y, APoints[2].Y, APoints[3].Y]);
end;
Ну или доработайте под себя. Мне надо было узнать высоту и ширину повернутых на определенный угол символов.
← →
Anatoly Podgoretsky © (2010-04-04 13:36) [5]> Ms-R (04.04.2010 11:14:00) [0]
Лучше всего привлечь матричное исчисление, наиболее полно и просто.
Ну а аналитически можно почитать тему Rotation в справке. Там приведены формулы.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.087 c