Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2008, 14:16   #1
SomeBod
Новичок
Джуниор
 
Регистрация: 05.04.2008
Сообщений: 1
По умолчанию Наклонный эллипс

Добрый день.
Хотелось бы получить ответ на такой вопрос.
Необходимо реализовать прорисовку части окружности (эллипса), наклонённого под углом к горизонтальной плоскости.
При использовании метода PIE() отрисовывается сектор горизонтально расположенного еллипса. CHORD() также даёт аналогичный результат.
Слышал о возможности деформации, только кроме эллипса необходимо осуществлять прорисовку ещё нескольких фигур, независимо, возможны пересечения с эллипсом и с площадью, которую он ограничивает. Не будут ли деформироваться другие фигуры в этом случае?
С кривыми Безье пока не знаком.
Пользоваться массивом пикселей как-то не хочется.
Идеально было бы узнать метод, где кроме задания координат прямоугольника задаётся ещё и угол наклона, либо задание эллипса (или, лучше, его части) с помощью координат фокусов.
Заранее спасибо за предложения.
SomeBod вне форума Ответить с цитированием
Старый 05.04.2008, 15:13   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

SetWorldTransform
Задаёте нужную матрицу(ы), вызываете в нужном месте (нужных местах) и всё.
B_N вне форума Ответить с цитированием
Старый 12.02.2016, 02:04   #3
programmer3
 
Аватар для programmer3
 
Регистрация: 10.03.2015
Сообщений: 4
По умолчанию

процедура рисования эллипса под наклоном
ellipse2(x-коорд.центра,y-коорд.центра,длина б.диагонали,длина м.диагонали,угол поворота эллипса против час.стр. от горизонтали в радианах)

Код:

program ell;
uses crt,graphABC;
var j:integer;



procedure Ellipse2(x,y,d,h:integer;a:real);
var n,m,b,xx,yy:real;i,z:integer;


function xs(xxx,yyy:real):integer;
var coss,sinn,radiuuss:real;
begin
radiuuss:=sqrt(sqr(xxx-x)+sqr(yyy-y));
coss:=(xxx-x)/radiuuss;
sinn:=(y-yyy)/radiuuss;
xs:=round(x+radiuuss*(cos(a)*coss-sin(a)*sinn));
end;


function ys(xxx,yyy:real):integer;
var sinn,coss,radiuuss:real;
begin
radiuuss:=sqrt(sqr(xxx-x)+sqr(yyy-y));
sinn:=(y-yyy)/radiuuss;
coss:=(xxx-x)/radiuuss;
ys:=round(y-radiuuss*(cos(a)*sinn+sin(a)*coss)) ;
end;

begin
m:=2*sqrt(d*d/4-h*h/4);
xx:=x-d/2;
yy:=y;

for i:=round(x-d/2)+1 to round(x+1) do begin
n:=abs(d-m)/2-i+x-d/2;
b:=sqrt(sqr((d*d-n*n+sqr(m+n))/(2*d))-sqr(m+n));
line(xs(xx,yy),ys(xx,yy),xs(i,y-b),ys(i,y-b));
line(xs(xx,2*y-yy),ys(xx,2*y-yy),xs(i,y+b),ys(i,y+b));
line(xs(2*x-xx,2*y-yy),ys(2*x-xx,2*y-yy),xs(2*x-i,y+b),ys(2*x-i,y+b));
line(xs(2*x-xx,yy),ys(2*x-xx,yy),xs(2*x-i,y-b),ys(2*x-i,y-b));
xx:=i;
yy:=y-b;
end;
//line(xs(x-d/2,y),ys(x-d/2,y),xs(x+d/2,y),ys(x+d/2,y));
//line(xs(x,y-h/2),ys(x,y-h/2),xs(x,y+h/2),ys(x,y+h/2));



end;






begin
setwindowsize(1200,1000);
{
for j:=1 to 2000 do begin
clearwindow;
ellipse2(300,300,300,200,0+j/100);
delay(50);

end; }
ellipse2(500,300,300,180,pi/4);
end.

Последний раз редактировалось programmer3; 12.02.2016 в 02:08.
programmer3 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц