1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Здравствуйте. Мне нужно нарисовать кораблик, который двигался бы по синусоиде..вот кораблик вроде сделала, разобралась, но он плывет по прямой..и то коряво..помогите пожалуйста..подскажите что не так..
А можно к вам еще обратиться. У меня задача такая, нужно нарисовать землю и вращающуюся вокруг нее луну, при чем так фто бы луна пересекала землю сзади. Ну вот они у меня движутся, только никак не могу раскрасить и не понимаю как сделать так фто бы луна пересекала землю, но изображение земли при этом не повреждалось..
uses graph, crt;
const a = 300;
b = 230;
r = 150;
r1 =10;
dphi = 2*Pi/72;
n =18;
var grDriver,
grMode,
grErr:integer;
i, x, y:integer;
phi :real;
begin
grDriver:=Detect;
InitGraph(grDriver, grMode,'c:\');
grERR:=graphResult;
if grErr<>grOK thenbegin
writeln('ошибка ',graphErrorMsg(grErr));
halt
end;
setcolor(green);
circle( a, b, r div2 );
phi:= 0;
whilenot keypressed dobegin
y:=round(R*sin(phi)/2);
x:=round(R*cos(phi));
setcolor(green);
circle(x+a,y+b,R1);
delay(5000);
setcolor( getBkColor );
circle(x+a,y+b,R1);
phi:= phi+dphi;
end;
closegraph;
end.
setfillstyle(solidfill, blue); { рисуем Землю }
fillellipse(a, b, R div2, R div2);
setcolor(white);
circle(a, b, R div2);
phi:= 0;
whilenot keypressed dobegin
y:=round(R*sin(phi)/2);
x:=round(R*cos(phi));
setfillstyle(solidfill, lightgray); { рисуем Луну }
fillellipse(x+a, y+b, R1, R1);
if y < 0thenbegin{ если Y < 0, а следовательно, Земля закрывает Луну }
setfillstyle(solidfill, blue); { , то поверх только что нарисованной Луны перерисовываем Землю }
fillellipse(a, b, R div2, R div2);
setcolor(white);
circle(a, b, R div2);
end;
delay(75);
setcolor(getbkcolor); { а теперь затираем изображение луны, для чего }
setfillstyle(solidfill, getbkcolor); { рисуем цветом фона чуть бОльший круг }
fillellipse(x+a, y+b, R1+2, R1+2);
setfillstyle(solidfill, blue); { и, поскольку, изображение Земли тоже могла пострадать, }
fillellipse(a, b, R div2, R div2); { перерисовываем и ее... }
setcolor(white);
circle(a, b, R div2);
phi:= phi+dphi;
end;
Но у этого способа есть небольшой недостаток: он будет мерцать. Чтобы избавиться от мерцания придется несколько усложнить программу, скажем перейти на многостраничную графику: на одной странице рисуем, другую в этот момент показываем, потом переключаемся на уже отрисованное (страница обновляется за один проход луча, мерцания не видно). Примеры таких программ посмотри в поиске по форуму, ключевые слова SetVisualPage и SetActivePage.
Можно сделать и без многостраничности: проверять, касается ли Луна Земли (портит ее изображение) или нет. Если нет - то можно не отрисовывать Землю повторно, это уменьшит мерцания. Но когда Луна будет проходить перед Землей или позади нее - мерцание все же останется, поэтому первый способ все-же предпочтительнее.
P.S. Следующий вопрос, если он будет, не относящийся к этим программам, задавай в новой теме...