|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.04.2008, 14:16 | #1 |
Новичок
Джуниор
Регистрация: 05.04.2008
Сообщений: 1
|
Наклонный эллипс
Добрый день.
Хотелось бы получить ответ на такой вопрос. Необходимо реализовать прорисовку части окружности (эллипса), наклонённого под углом к горизонтальной плоскости. При использовании метода PIE() отрисовывается сектор горизонтально расположенного еллипса. CHORD() также даёт аналогичный результат. Слышал о возможности деформации, только кроме эллипса необходимо осуществлять прорисовку ещё нескольких фигур, независимо, возможны пересечения с эллипсом и с площадью, которую он ограничивает. Не будут ли деформироваться другие фигуры в этом случае? С кривыми Безье пока не знаком. Пользоваться массивом пикселей как-то не хочется. Идеально было бы узнать метод, где кроме задания координат прямоугольника задаётся ещё и угол наклона, либо задание эллипса (или, лучше, его части) с помощью координат фокусов. Заранее спасибо за предложения. |
05.04.2008, 15:13 | #2 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
SetWorldTransform
Задаёте нужную матрицу(ы), вызываете в нужном месте (нужных местах) и всё. |
12.02.2016, 02:04 | #3 |
Регистрация: 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. |