Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2007, 16:26   #1
Sergik1977
Пользователь
 
Регистрация: 18.10.2007
Сообщений: 12
По умолчанию Циссоида

В общем вот эта прога у меня должна начертить циссоиду. Циссоида это такая фигня типа буквы «V» только перевернутая на правый бок. Шкалу я начертил, но циссоида чего-то не чертится. Надо еще там ее отцентрировать. Клюв у циссоиды должен упираться в кардиналы Y=0, X=0 .
Условие такое: Построить кривую циссоиду по заданному параметрическому уравнению:
x=at^2/(1+t^2)
y=at^3/(1+t^2), a>0 , t от минус бесконечности до плюс бесконечности


Код:
uses crt,graph;
  const b=2;
  var drive,mode,i:integer;
       x,y,t:real;
begin
  drive:=detect;
  initgraph(drive,mode,'c:BP\BGI');
  setcolor(3);
  line(10,240,400,240);
  line(10,100,10,400);
{putpixel (10,240,RED);- центровка }
  t:=0;
  while t=200 do
  begin
    t:=t+1;
    x:=b*sqrt(t)/(1+sqrt(t));
    y:=b*sqr(t)/(1+sqrt(t));
    x:=10+x;
    y:=240+y;
    PutPixel(round(x),round(y),red);
  end;

  readln;
end.
оформляй код с использованием тегов! Alex21

Последний раз редактировалось Alex21; 28.10.2007 в 17:31.
Sergik1977 вне форума Ответить с цитированием
Старый 28.10.2007, 18:03   #2
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

Перед readLn напиши:
Код:
   x:=Round(50*16/(1+16))+Getmaxx div 2;
   y:=Round(50*(-64)/(1+16))+75;
   MoveTo(Round(x),Round(y));
   SetLineStyle(0,0,3);
   for i:=-1000 to 1000 do
     begin t:=i/100;
       x:=Round(50*t*t/(1+t*t))+10;
       y:=Round(50*t*t*t/(1+t*t))+240;
       LineTo(Round(x),Round(y));
     end;
Maslan вне форума Ответить с цитированием
Старый 28.10.2007, 19:16   #3
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

У циссоиды Диокла (лист плюща) есть уравнение и в декартовой системе:
y=sqrt(x*x*x/(a-x)) - это верхняя ветвь,
y=-sqrt(x*x*x/(a-x)) - нижняя ветвь.
Может по ним проще строить график.
0 <= x < a

Последний раз редактировалось _Dmitry; 28.10.2007 в 19:40.
_Dmitry вне форума Ответить с цитированием
Старый 28.10.2007, 22:17   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
while t=200 do
Случаем это не опечатка? Обычно условие проверяется до какой-то величины , например: while t<200 или while t<= 200.
puporev вне форума Ответить с цитированием
Старый 29.10.2007, 06:12   #5
Sergik1977
Пользователь
 
Регистрация: 18.10.2007
Сообщений: 12
По умолчанию

Ну Maslan я тебе уже должен как земля колхозу))) Получилась вот такая прграммка:

Код:
 
uses crt,graph;
   var drive,mode,i:integer;
   x,y,t:real;
 begin
   drive:=detect;
   initgraph(drive,mode,'c:BP\BGI');
   setcolor(3);
   line(10,240,400,240);
   line(10,100,10,400);
   for i:=-1000 to 1000 do
   begin t:=i/500;
     x:=Round(100*t*t/(1+t*t))+10;
       y:=Round(100*t*t*t/(1+t*t))+240;
       PutPixel(Round(x),Round(y),red);
   end;
   readln;
 end.

Последний раз редактировалось Alex21; 29.10.2007 в 15:20.
Sergik1977 вне форума Ответить с цитированием
Старый 29.10.2007, 08:04   #6
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

=)
Я бы ещё поставил коэффициент растяжения по OX побольше, типа
x:=Round(500*t*t/(1+t*t))+10; , но это просто для внешнего вида, если есть требования какие-то, то конечно рисуй так, как требуется.
Цитата:
уже должен как земля колхозу
Ничего... Разберёмся =))
Maslan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц