forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_bezier - Рисование кривой Безье (http://forum.boolean.name/showthread.php?t=11414)

odd 12.12.2009 13:41

Lib_bezier - Рисование кривой Безье
 
Вложений: 2
Библиотека для рисования кривой Безье по координатам трех точек.

DrawBezier(x1: integer; y1: integer; x2: integer; y2: integer; x3: integer; y3: integer) - Нарисовать кривую Безье по координатам трех точек
x1, y1 - координаты первой точки
x2, y2 - координаты второй точки
x3, y3 - координаты третьей точки
При рисовании используется текущий установленный цвет

Результат работы программы, описанной ниже:


Простейший пример рисования кривой:
PHP код:

Program BezierDemo;
Uses Bezier;
Var 
x1x2x3y1y2y3integer;
Begin

    
// Задаем точки для нормалей
    
x1:=0y1:=0;
    
x2:=100y2:=50;
    
x3:=10y3:=150;
    
    
// Рисуем нормали - так, для прикола
    
SetColor(200200200);
    
DrawLine(x1y1x2y2);
    
DrawLine(x2y2x3y3);
    
SetColor(25500);

    
// Рисуем кривую Безье
    
DrawBezier(x1y1x2y2x3y3);
    
    
// Перерисовка экрана и ждем 5 сек
    
RepaintDelay(5000);
    
End


cherepets 13.12.2009 14:40

Ответ: Lib_bezier - Рисование кривой Безье
 
крууто...
теперь на теории можно сделать векторный граф редактор на МП, но на практике слишком сложно...

VotapilD 18.12.2009 02:16

Ответ: Lib_bezier - Рисование кривой Безье
 
А есть ли что-то вроде lib_graf? Там... Толщину линий изменить, треугольник нарисовать...

odd 12.01.2010 01:21

Ответ: Lib_bezier - Рисование кривой Безье
 
Толщину линии можно изменить с помощью вывода нескольких одинаковых кривых с шагом в 1 пиксел вверх или вправо.

abcdef 26.07.2010 20:40

Ответ: Lib_bezier - Рисование кривой Безье
 
Интересная либа, решил переписать на MP:
Код:

procedure drawBezier(x1,y1,x2,y2,x3,y3,count : integer);
var
  i,j,x,y,xx,yy : integer;
begin
  x := x1;
  y := y1;
  for i := 0 to count do
  begin
    j := count-i;
    xx := ((x1 * j * j) + (x2 * 2 * i * j) + (x3 * i * i)) div (count*count);
    yy := ((y1 * j * j) + (y2 * 2 * i * j) + (y3 * i * i)) div (count*count);
    drawLine(x,y,xx,yy);
    x := xx;
    y := yy;
  end;
  drawLine(x,y,x3,y3);
end;


var
  x1, x2, x3, y1, y2, y3: integer;
begin
  // Задаем точки для нормалей
  x1:=0; y1:=0;
  x2:=100; y2:=50;
  x3:=10; y3:=150;
  // Рисуем нормали - так, для прикола
  setColor(200, 200, 200);
  drawLine(x1, y1, x2, y2);
  drawLine(x2, y2, x3, y3);
  setColor(255, 0, 0);
  // Рисуем кривую Безье
  drawBezier(x1, y1, x2, y2, x3, y3,30);
  // Перерисовка экрана и ждем 10 сек
  repaint;
  delay(10000);
end.


psih1 26.07.2010 22:20

Ответ: Lib_bezier - Рисование кривой Безье
 
Неплохо

psih1 29.07.2010 13:57

Ответ: Lib_bezier - Рисование кривой Безье
 
PHP код:

Program PointerTest;
Uses sensor,Bezier; ;
Var 
oxoypxpystateinteger;
Begin
sensor
.init// Инициализация библиотеки
repeat // Бесконечный цикл
state:=pointer_state// Читаем состояние сенсора
if state=1 then // Если нажали, то...
begin
if (ox=0) and (oy=0then
begin
ox
:=pointer_dragged_xoy:=pointer_dragged_y;
end;
// Выясняем куда именно нажали (координаты)
px:=pointer_dragged_xpy:=pointer_dragged_y;

 
// Рисуем кривую Безье
    
DrawBezier(oxoy00pxpy); 
// Запоминаем предыдущую точку для рисования следующей линии
ox:=pxoy:=py;
end;
// Если ничего не нажали - сбрасываем координаты в 0
else begin ox:=0oy:=0;
end;
RepaintDelay(20); // Отрисовка линии и небольшая пауза
until false;
End

в чем ошибка делаю все правильно

odd 14.08.2010 15:41

Ответ: Lib_bezier - Рисование кривой Безье
 
Вместо dragged используй pressed.


Часовой пояс GMT +4, время: 23:03.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot