Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Рисование КРИВЫХ в 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 World © Выпуск 2002 - 2024
Автор проекта: USU Software
Вы можете выкупить этот проект.