Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Рисование КРИВЫХ в Delphi 2

Delphi , Графика и Игры , Графика

Рисование КРИВЫХ в Delphi 2

В: У кого-нибудь есть исходный код или какая-либо информация для рисования кривых Безье? Я должен использовать их в своем компоненте. Пожалуйста используйте для ответа мой адрес электронной почты.

Я решил ответить на этот крик души - причина?: 1. Не первый раз вижу подобный вопрос, 2. Задача настолько избита, что я без труда нашел ответ в своем архиве. (BTW: У меня есть более старые решения, чем это ;-P)

Тем не менее эта технология жива до сих пор и приносит свои плоды:


(********************************************************************)
(*                         GRAPHIX TOOLBOX 4.0                      *)
(*       Copyright (c) 1985, 87 by  Borland International, Inc.     *)
(********************************************************************)
unit GShell;

interface

{------------------------------ вырезано --------------------------}

procedure Bezier(A: PlotArray; MaxContrPoints: integer;
  var B: PlotArray; MaxIntPoints: integer);

implementation

{------------------------------ вырезано --------------------------}

procedure Bezier {(A : PlotArray; MaxContrPoints : integer;
var B : PlotArray; MaxIntPoints : integer)};
const
  MaxControlPoints = 25;
type
  CombiArray = array[0..MaxControlPoints] of Float;
var
  N: integer;
  ContrPoint, IntPoint: integer;
  T, SumX, SumY, Prod, DeltaT, Quot: Float;
  Combi: CombiArray;
begin
  MaxContrPoints := MaxContrPoints - 1;
  DeltaT := 1.0 / (MaxIntPoints - 1);
  Combi[0] := 1;
  Combi[MaxContrPoints] := 1;
  for N := 0 to MaxContrPoints - 2 do
    Combi[N + 1] := Combi[N] * (MaxContrPoints - N) / (N + 1);
  for IntPoint := 1 to MaxIntPoints do
  begin
    T := (IntPoint - 1) * DeltaT;
    if T <= 0.5 then
    begin
      Prod := 1.0 - T;
      Quot := Prod;
      for N := 1 to MaxContrPoints - 1 do
        Prod := Prod * Quot;
      Quot := T / Quot;
      SumX := A[MaxContrPoints + 1, 1];
      SumY := A[MaxContrPoints + 1, 2];
      for N := MaxContrPoints downto 1 do
      begin
        SumX := Combi[N - 1] * A[N, 1] + Quot * SumX;
        SumY := Combi[N - 1] * A[N, 2] + Quot * SumY;
      end;
    end
    else
    begin
      Prod := T;
      Quot := Prod;
      for N := 1 to MaxContrPoints - 1 do
        Prod := Prod * Quot;
      Quot := (1 - T) / Quot;
      SumX := A[1, 1];
      SumY := A[1, 2];
      for N := 1 to MaxContrPoints do
      begin
        SumX := Combi[N] * A[N + 1, 1] + Quot * SumX;
        SumY := Combi[N] * A[N + 1, 2] + Quot * SumY;
      end;
    end;
    B[IntPoint, 1] := SumX * Prod;
    B[IntPoint, 2] := SumY * Prod;
  end;
end; { Bezier }

end. { GShell }

Статья Рисование КРИВЫХ в Delphi 2 раздела Графика и Игры Графика может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Графика ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
20.04.2024 08:45:00/0.036947011947632/2