Помощь - Поиск - Пользователи - Календарь
Полная версия: Графика (шаровой сегмент)
Форум «Всё о Паскале» > 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 меняешь на вызов этой процедуры, и получаешь, что хотел...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.