Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
Fraunsa
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 7
1

Нарисовать эллипс

24.12.2015, 19:25. Просмотров 3906. Ответов 5
Метки нет (Все метки)

Привет всем! Помогите с лабой, нужно нарисовать эллипс внутри он закрашен перламутровым цветом,а сам он обведен красным.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2015, 19:25
Ответы с готовыми решениями:

Нарисовать эллипс в круге
Здравствуйте..знаю глупый вопрос,но можете помочь..поставить эллипс в круг с...

Как нарисовать эллипс под углом
как нарисовать эллипс под углом,знаю что простой эллипс можно нарисовать с...

В левой половине графического экрана нарисовать треугольник, в середине треугольника – эллипс
В левой половине графического экрана нарисовать треугольник, в середине...

Построить темно серый ромб и желтый эллипс
РЕбят помогите. Нужно построить темно серый ромб и желтый эллипс. Заранее...

Нарисовать эллипс, не используя оператор CIRCLE
Помогите плиз написать программу :Нарисовать эллипс, не используя оператор...

5
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
4231 / 3071 / 3797
Регистрация: 05.06.2014
Сообщений: 15,452
24.12.2015, 20:05 2
Лучший ответ Сообщение было отмечено Fraunsa как решение

Решение

Pascal
1
2
3
4
5
6
7
8
uses
  GraphABC;
 
begin
  SetPenColor(clRed);
  SetBrushColor(clRosyBrown); // перламутровый? ;)
  Ellipse(50, 50, WindowWidth - 50, WindowHeight - 50); 
end.
1
Fraunsa
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 7
24.12.2015, 21:49  [ТС] 3
Спасибо!
А можно еше,вот из этого кода ,сделать эллипс и обводку обычными линиями (красного цвета ) а не штриховкой. Цвет закраски оставить градиентом .
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
uses graphABC;
procedure BrezenCircle(x0, y0, r: integer);
 var
 x, y: integer;
 dv, dd, dh: integer;
 c,s:integer;//штрих
 procedure sim(x, y: integer); {построить 4 симметричные точки}
  begin
    putpixel(x0+x, y0+y, clBlue); {верхняя правая четверть}
    putpixel(x0+x, y0-y, clBlue); {нижняя правая четверть}
    putpixel(x0-x, y0+y, clBlue); {верхняя левая четверть}
    putpixel(x0-x, y0-y, clBlue); {нижняя левая четверть}
  end;
  procedure zal(x, y: integer); {построить 4 симметричные linii}
  var i,j,k,t:integer;
  begin j:=0; k:=255; t:=210;
  for i:=x0-x+1 to x0+x-1 do begin
  j:=j+1 mod 255;
  k:=k-1 mod 255;
  t:=t-1 mod 255;
    putpixel(i,y0+y-1, rgb(j,k,t)); 
    putpixel(i,y0-y+1, rgb(j,k,100));end;
  end;
begin
  x:=0; c:=1; s:=10;
  y:=r;
  while((y>=0)or(x<r)) do {обход идет по верхней правой четверти}
    begin
      if (c mod s < s*0.5) then 
        begin
        c:=c+1;
        sim(x,y);
        zal(x,y);
        dv:=abs(r*r - x*x - (y-1)*(y-1)); {сдвиг на 1 вниз}
        dh:=abs(r*r - (x+1)*(x+1) - y*y); {сдвиг на 1 вправо}
        dd:=abs(r*r - (x+1)*(x+1) - (y-1)*(y-1)); {сдвиг на 1 по диагонали вправо и вниз}
        if(dv<dh) then {если сдвиг вниз ближе к радиусу круга}
          begin
            dec(y);
            if(dd<dv) then inc(x); {если сдвиг по диагонали ближе к радиусу круга}
          end
        else {если сдвиг вправо ближе к радиусу круга}
          begin
          inc(x);
          if(dd<dh) then dec(y); {если сдвиг по диагонали ближе к радиусу круга}
          end;
         
        end
        else begin
        c:=c+1;
        zal(x,y);
         dv:=abs(r*r - x*x - (y-1)*(y-1)); {сдвиг на 1 вниз}
        dh:=abs(r*r - (x+1)*(x+1) - y*y); {сдвиг на 1 вправо}
        dd:=abs(r*r - (x+1)*(x+1) - (y-1)*(y-1)); {сдвиг на 1 по диагонали вправо и вниз}
        if(dv<dh) then {если сдвиг вниз ближе к радиусу круга}
          begin
            dec(y);
            if(dd<dv) then inc(x); {если сдвиг по диагонали ближе к радиусу круга}
          end
        else {если сдвиг вправо ближе к радиусу круга}
          begin
          inc(x);
          if(dd<dh) then dec(y); {если сдвиг по диагонали ближе к радиусу круга}
          end;
        end
    end;
    
end;
 
begin
setpencolor(clBlue);
BrezenCircle(300, 200, 100);
setpencolor(clRed);
end.
0
Puporev
Модератор
55454 / 42566 / 29416
Регистрация: 18.05.2008
Сообщений: 100,703
24.12.2015, 22:16 4
Алгоритм Брезенхема для эллипса вроде очень сложный, я как-то искал в инете и не нашел чего-либо более-менее простого.
1
Fraunsa
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 7
24.12.2015, 22:49  [ТС] 5
Если уже такие мастера говорят о трудности задания
То наверное,если изменить эллипс на круг преподаватель не будет ругаться.
Можно тоже самое задания сделать для круга (просто обводку сделать цветной и сплошными линиями, а не штрих)? Заранее спасибо.
0
Puporev
Модератор
55454 / 42566 / 29416
Регистрация: 18.05.2008
Сообщений: 100,703
25.12.2015, 08:22 6
Строка 29
Pascal
1
if (c mod s < s) then
А окружность и так цветная
Pascal
1
2
3
4
5
putpixel(x0+x, y0+y, clBlue); {верхняя правая четверть}
    putpixel(x0+x, y0-y, clBlue); {нижняя правая четверть}
    putpixel(x0-x, y0+y, clBlue); {верхняя левая четверть}
    putpixel(x0-x, y0-y, clBlue); {нижняя левая четверть}
Если хотите смените цвет с синего на другой.
1
25.12.2015, 08:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2015, 08:22

Построить эллипс
Элиппс с большой и малой полуосями, равными соответственно r1 и r2 и...

Нарисовать лес на экране (нарисовать дерево, и размножить его на экране)
73. Нарисовать лес на экране (нарисовать дерево, и размножить его на экране)

В центре экрана нарисуйте эллипс, закрашенный цветом LightGreen, всю остальную площадь экрана сделайте фиолетовой.
помогите пожалуйста!!!уже не знаю что делать....ничего в графическом не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru