Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Построение кривой Безье порядка M


Автор: Гость_Alex_G 15.1.2006, 00:06
Помогите, пожалуйста написать в Pascal'е прогу или процедуру, рисующую кривую Безье порядка M по узловым точкам.

Функцию, вычисляющую сочетания, написал без проблем, а дальше не получается.
Код

function Binom(i, m: integer): real;
  function factorial(x: integer): double;
    begin
      if x=0 then factorial:=1 else factorial:=x*factorial(x-1);
    end;
var Cim: real;
begin
  Cim:=factorial(m)/(factorial(i)*factorial(m-i));
end;

Автор: Msl 20.1.2006, 18:42
Вот отрыл в soft-загашниках:

Код

unit bezier;

interface
uses windows,Messages, SysUtils,  Graphics;

implementation

//msl+ Bezier Curve for Delphi Canvas

PROCEDURE DrawBezierCurve (CNV:TCanvas;px1, py1, px2, py2, px3, py3, px4, py4, count : INTEGER);

FUNCTION pow (x : Extended; y : WORD) : Extended;
VAR
  nt     : WORD;
  rslt : Extended;
BEGIN
 rslt := 1;
 FOR nt := 1 TO y DO
     rslt := rslt * x;
 pow := rslt;
END;


PROCEDURE Bezier (t : Extended; VAR x, y : INTEGER);
BEGIN
 x := TRUNC (pow (1 - t, 3) * px1 + 3 * t * pow (1 - t, 2) * px2 +
                3 * t * t * (1 - t) * px3 + pow (t, 3) * px4);
 y := TRUNC (pow (1 - t, 3) * py1 + 3 * t * pow (1 - t, 2) * py2 +
                3 * t * t * (1 - t) * py3 + pow (t, 3) * py4);
END;
VAR
 resolution, t : extended;
 xc, yc       : INTEGER;
BEGIN
  IF count = 0 THEN EXIT;
  resolution := 1 / count;
  cnv.MOVETO (px1, py1);
  t := 0;

  WHILE t < 1 DO BEGIN
    Bezier (t, xc, yc);
    cnv.LINETO (xc, yc);
    t := t + resolution;
  END;
  cnv.LINETO (px4, py4);
END;

end.


Бог в помощь! Удача в руки!

Автор: Rencom 21.1.2006, 01:19
Msl раздел по паскалю, запарили делфи кидать.....

Автор: Bodro 4.2.2006, 02:45
Первое:
Это не вопрос! Парень, видно, хочет, чтобы за него всё сделали! Могу посоветовать искать доки или в виде книг, или в google.ru, потом их читать и разбираться. Затем всё написать и отладить. А если не получится что-то - спросить! Что, хочешь чтобы тепе всё рассказали? А с документацией что, работать не умеешь?

Второе:
А какая разница Delphi или Turbo Pascal? Язык-то один. В чём отличие-то? В наличии канвы? Что, тяжело код что ли переделать? Вместо cnv.LINETO (xc, yc); написать просто LINE(X0, Y0, X1, Y1);
В чём разница-то?

Автор: Guedda 4.2.2006, 09:21
Цитата(Bodro @ 4.2.2006, 03:45)
Первое:
Это не вопрос! Парень, видно, хочет, чтобы за него всё сделали! Могу посоветовать искать доки или в виде книг, или в google.ru, потом их читать и разбираться. Затем всё написать и отладить. А если не получится что-то - спросить! Что, хочешь чтобы тепе всё рассказали? А с документацией что, работать не умеешь?


Так... Парень показал код и указал точное место, чего ему не под силу. Поэтому не факт, что он хочет, чтобы кто-то все сделал за него.

Цитата(Bodro @ 4.2.2006, 03:45)
Второе:
А какая разница Delphi или Turbo Pascal? Язык-то один. В чём отличие-то? В наличии канвы? Что, тяжело код что ли переделать? Вместо cnv.LINETO (xc, yc); написать просто LINE(X0, Y0, X1, Y1);
В чём разница-то?

Разница, дорогой(ая) мой(я), во всем, начиная с того, что TP = Win16, a Delphi = Win32, у дельфи есть визуальная среда и т.д. Я думаю, не стоит сравнивать то, чего не знаешь.

Автор: Bodro 15.2.2006, 10:46
Я имел ввиду код. Никто не сравнивал Delphi и Turbo Pascal.
Синтаксис, ёлки, один и тот же.
Если есть исходники на Делфе, то их не сложно переделать под TP.
Разговор то не о среде и так далее, а о языке. Один хрен - Pascal!

Цитата

Разница, дорогой(ая) мой(я), во всем, начиная с того, что TP = Win16, a Delphi = Win32, у дельфи есть визуальная среда и т.д. Я думаю, не стоит сравнивать то, чего не знаешь.

Ты что воообще имел ввиду-то? smile
Вообще, TP разрабатывался под MS DOS. В нём деже нет поддержки защищённого режима. В BP есть, а в TP - нет. При чём тут Win16? smile

А самое интересное, что это главная проблема форумов - все говорят о чём хотят, только не отвечают на вопрос. Предлагаю закрыть нашу дискуссию и отвечать только по делу. Всё! Пока!

Автор: Bodro 16.2.2006, 11:59
Могу порекомендовать книгу Френсиса Хилла "OpenGL. Программирование компьютерной графики. Для профессионалов". Книга очень хорошая. Не обращай внимания на надпись "OpenGL". Там довольно много математики. Найдёшь все выкладки для кривых и поверхностей Безье. Всё нормально описано. А запрограммировать мат.выкладки ничего сложного не представляет.
Стоит она, правда, дорого. Но тебе её не обязательно покупать. Зайди в магазин. Возьми посмотреть книгу. Найди раздел посвящённый кривым Безье да спиши пару формул. Просто и эффективно. И всё получится. Удачи!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)