Помощь - Поиск - Пользователи - Календарь
Полная версия: Графика (шаровой сегмент)
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Edison
Собствено нужно построить шаровой сегмент.Размерность произвольная.

Добавлено через 13 мин.
Для начала хотел попробывать нарисовать эллипсную дугу,но почему-то не получается:

Program ris;
uses crt,graph;
var
driver,mode:integer;
x,y:integer;
xr.yr:word;
begA,endA:word;
begin
driver:detect;
initgraph (driver,mode,'d:\bp\bgi');
setcolor (4);
x:=100;
y:=200;
xr:=30;
yr:=30;
begA:=20;
endA:=20;
ellipse (x,y,begA,endA,xr,yr);
readln;
closegraph
end.


Появляется чёрный экран и не более.
volvo
Цитата
почему-то не получается
Вообще-то и не должно, угол начала и угол окончания дуги у тебя совпадают, а значит, никакой дуги-то и нет...
Edison
Штрих-пунктирную дугу можно нарисовать при помощи процедуры SetLineStyle или как-то по другому?
volvo
SetLineStyle влияет только на рисование отрезков, на кривые ее действие не распространяется. Придется тебе рисовать маленькие отрезки дуг в цикле.
Edison
Цитата(volvo @ 17.01.2009 19:21) *

SetLineStyle влияет только на рисование отрезков, на кривые ее действие не распространяется. Придется тебе рисовать маленькие отрезки дуг в цикле.


И как в программе должен выглядеть этот цикл?
volvo
Вот так, например:
Program ris;
uses crt,graph;

procedure DashedEllipse(X, Y: Integer; StAngle, EndAngle: Word;
XRadius, YRadius: Word);
const
angle = 10;
var
i, n: integer;
color: integer;
begin
n := (EndAngle - StAngle) div angle;
color := GetColor;
for i := 1 to n do begin { <--- Вот этот самый цикл }
if odd(i) then setcolor(color) else setcolor(getbkcolor);
Ellipse(X, Y, StAngle + pred(i) * angle, StAngle + i * angle,
XRadius, YRadius);
end;
setcolor(color);
end;


var
driver,mode:integer;
x,y:integer;
xr,yr:word;
begA,endA:word;
begin
driver:=detect;
initgraph(driver, mode, 'd:\bp\bgi');
setcolor(white);
x:=100;
y:=200;
xr:=30;
yr:=30;
begA:=20;
endA:=220;
dashedellipse(x, y, begA, endA, xr, yr);
readln;
closegraph
end.
Edison
Никак не получается добавить цикл в:


Program segment;
uses crt,graph;
var
driver,mode:integer;
x,y:integer;
r,rx,ry:word;
begA,endA:word;
begin
clrscr;
driver:=detect;
initgraph (driver,mode,'d:\bp\bgi');
setcolor (15);
x:=320;
y:=240;
r:=100;
begA:=30;
endA:=150;
arc (x.y.begA,endA,r);
begA:=195;
endA:=347;
rx:=90;
ry:=40;
y:=180;
r:=50;
ellipse (x,y,begA,endA,rx,ry);
begA:=14;
endA:=165;
y:=200;
ellipse (x,y,begA,endA,rx,ry);{эту дугу хотелось бы увидеть штрих-пунктирной}
readln;
end.


volvo
Цитата
{эту дугу хотелось бы увидеть штрих-пунктирной}
Я для кого выше привел реализацию DashedEllipse? Вызов Ellipse меняешь на вызов этой процедуры, и получаешь, что хотел...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.