Помощь - Поиск - Пользователи - Календарь
Полная версия: Графика
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Mantikor123
Помогите написать програми времени уже савсем неуспеваю:(
нарисовать график:
y=sinX+3;

Нарисовать анимацию:
Шатающевовася подсолнуха
Ozzя
Цитата
уже савсем неуспеваю:(

А шо, таки призыв в РА уже объявлен? blum.gif

Цитата
нарисовать график:

Поиск по образцу "построение графика функции"
Mantikor123
В РА мне не грозит:)
а так не успеваю:(
Собствена график уже нарисовал:)
а вот анимацию......
Ozzя
Цитата
а вот анимацию......
А чего уж такого сложного?
Сам цветок рисуется элементарно (окружностями). А анимацию можно получить, сгибая стебель, например
Mantikor123
Цитата(Ozzя @ 26.03.2010 15:00) *

А чего уж такого сложного?
Сам цветок рисуется элементарно (окружностями). А анимацию можно получить, сгибая стебель, например

Помогите тогда плиз:)
а то мне даже на цветок смотреть страшна..sad.gif
Ozzя
Цитата
Помогите тогда плиз:)

Да не проблема. Вот только одну окружность нарисуй. А цветок из них я тебе сделаю
Mantikor123
М_м не совсем понял што ви имеете в виду, ну вот мои наброски...

program gr_1;
uses graph,crt;
var r1, rad, i, grDriver, grMode, errCode : integer;



begin
grDriver:=detect;
InitGraph(grDriver,grMode,'\bp\bgi\');
errCode:=GraphResult;
if errCode=grOk then begin
{for i:=1 to 999 do begin }
setcolor(14);
circle(320+i,200+i,75);
{ floodfill(330,210,yellow);}
circle(320+i,200+i,50);

setcolor(18);
setlinestyle(0,99,0);
{circle(320,340,);}
line(320,273,320,480);
{end;}
readln;

closegraph;{ўi¤¬i­  ०Ё¬г Ја дiЄЁ}


end;
end.


.
Ozzя
program gr_1;
uses
graph,crt;
var
i, grDriver, grMode, errCode : integer;

procedure PodSolnuh(x,y: Integer);
var
rsmall,rad : Integer;
begin
rad:=75;
rsmall:=30;
setcolor(Yellow);
circle(x,y,rad);
SetFillStyle(1,yellow);
floodfill(x-1,y-1,yellow);
setcolor(White);
SetFillStyle(1,White);
circle(x+rad,y-rad,rsmall);
floodfill(x+rad,y-rad,White);
circle(x+rad,y+rad,rsmall);
floodfill(x+rad,y+rad,White);
circle(x-rad,y+rad,rsmall);
floodfill(x-rad,y+rad,White);
circle(x-rad,y-rad,rsmall);
floodfill(x-rad,y-rad,White);
circle(x,y-rad-rsmall ,rsmall);
floodfill(x,y-rad-rsmall,White);
circle(x,y+rad+rsmall ,rsmall);
floodfill(x,y+rad+rsmall,White);
circle(x+rad+rsmall,y ,rsmall);
floodfill(x+rad+rsmall,y,White);
circle(x-rad-rsmall,y ,rsmall);
floodfill(x-rad-rsmall,y,White);
end;

begin
grDriver:=detect;
InitGraph(grDriver,grMode,'\bp\bgi\');
errCode:=GraphResult;
if errCode=grOk then
begin
for i:=1 to 4 do
begin
podsolnuh(GetMaxX div 2 - i*100 ,GetMaxY div 2 + i*100);
Delay(200);
ClearviewPort;
end;
readln;
end;
closegraph;
end.

Рисуется и стирается подсолнух (без стебля).
Простейшая анимация - подсолнух рисуется, стирается - меняются координаты - снова/заново

volvo
Что-то больше на ромашку похоже, чем на подсолнух smile.gif

Оззя, кстати, у тебя нигде нет формулы для отрисовки фрактала - подсолнуха?... Где-то давно видел, теперь найти не могу. Просто для коллекции, я понимаю, что в этой теме делать движущийся фрактал - не совсем то, что нужно...
Ozzя
Ну-да smile.gif
Лепестки ж эллипсами надо отрисовывать. А рисование эллипса под наклоном под эту задачу - перебор, кажется.
Не, кода фрактального подсолнуха не встречал.
volvo
Цитата
А рисование эллипса под наклоном под эту задачу - перебор, кажется.
Ну, не настолько это сложно как может показаться.

Может, топикстартеру и не пригодится, но красиво получается smile.gif Может, кто-нибудь и использует когда потребуется.

program gr_1;
uses
graph, crt;
const
r2d = 180/Pi;

procedure DrawEllipse(xCenter, yCenter, Angle: integer);
const
a = 15;
b = 30;
var
Alpha, Phi, fX, fY: double;
i, X, Y: Integer;
begin
Alpha := Angle/r2d;
for i := 0 to 359 do
begin
Phi := i / r2d;
fX := a * Cos(phi);
fY := b * Sin(phi);
X := Trunc(xCenter + fX * Cos(Alpha) - fY * Sin(Alpha));
Y := Trunc(yCenter + fX * Sin(Alpha) + fY * Cos(Alpha));
PutPixel(X, Y, Yellow);
end;
FloodFill(xCenter, yCenter, Yellow)
end;


procedure SunFlower(X, Y: Integer);
const
RCircle = 75;
var
i, dist: integer;
phi: real;
begin
SetColor(Yellow);
SetFillStyle(SolidFill, Yellow);
FillEllipse(X, Y, RCircle, RCircle);

dist := (3 * RCircle div 2);
for i := 0 to 359 do
begin
if i mod 20 <> 0 then continue;
phi := i / r2d;

DrawEllipse(Trunc(x + dist*cos(phi)),
Trunc(y - dist*sin(phi)), 450 - i);
end;
end;

var
i, grDriver, grMode, errCode: integer;


begin
grDriver := Detect;
InitGraph(grDriver, grMode, '');

errCode := GraphResult;
if errCode = grOk then
begin
i := 1;
SunFlower(GetMaxX div 2 - i*100, GetMaxY div 2 + i*100);
readln;
end;
closegraph;
end.
(Движение добавлять не стал, это вообще элементарно)
Client
прикрепите скрин плз, охото глянуть что получилось smile.gif (у меня виста... smile.gif )
Lapp
Цитата(Client @ 26.03.2010 22:58) *
прикрепите скрин плз, охото глянуть что получилось smile.gif (у меня виста... smile.gif )

1. TP/BP прекрасно идет на Vista-32. Проблема не в Висте, а в 64-разрядности.
2. Обе проги замечательно компилируются FPC на моей W7-64 smile.gif
Client
у меня 32 битная и ни один проект с графикой на ТР не идет. А FPC нету smile.gif пойду скачаю...
sheka
Вот когда-то тоже похожую программку делал), только солнышко smile.gif Появился вопросик: floodfill так и должен долго отрисовывать заливку?
Lapp
Цитата(Client @ 26.03.2010 23:16) *
у меня 32 битная и ни один проект с графикой на ТР не идет.
А, ну да, сорри, она же полнооконная.. Извиняюсь )).
volvo
Цитата
floodfill так и должен долго отрисовывать заливку?
Не знаю, насчет должен или нет, но всегда FloodFill был намного медленнее, чем отрисовка заполненной фигуры (Bar будет быстрее чем Rectangle+FloodFill, а FillEllipse - быстрее Circle+FloodFill).

Вот что рисует мой код:
Нажмите для просмотра прикрепленного файла
А вот это - Оззин:
Нажмите для просмотра прикрепленного файла
Client
солнышко супер smile.gif сейчас бы у меня такое светило... гроза, дождь,тучи... smile.gif
Mantikor123
Всем спасибо за помощ и понимание:)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.