Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 05.07.2020
Сообщений: 12

Кривая Безье на PascalABC.NET

06.10.2020, 18:03. Показов 2686. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно построить кривую Безье, отображая вспомогательные многоугольники, используемые для получения каждой точки, но программа строит только исходный многоугольник и всё. Делаю все как в алгоритме из методички, но всё равно что-то не то.
Реализация геометрического алгоритма
Исходные данные:
step – шаг увеличения параметра t, определяет количество точек, по которым будет построена кривая Безъе;
m – количество точек исходного многоугольника;
R - массив с координатами точек нового многоугольника;
P - массив с координатами точек исходного многоугольника;
xn, yn – координаты первой точки линии, выводящейся на каждом шаге работы программы.
1. xn := P[1].x; yn := P[1].y; t := 0; step := 0.01;
2. Присвоить новому многоугольнику координаты исходного: R:= Р;
3. Для j от m до 2 делать: для i от 1 до (j-1) делать:
Выполнить поиск координат точек нового многоугольника по формулам:
R[i].x := R[i].x + round(t * (R[i + 1].x-R[i].x));
R[i].y := R[i].y + round(t*(R[i + 1].y-R[i].y));
4. Нарисовать отрезок с координатами (xn, yn, R[1].x, R[1].y);
2. t := t + step; xn := R[1].x; yn := R[1].y;
3. Если t > 1, то идти к пункту 7, иначе к пункту 2;
4. Конец.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
program bezie;
 
uses
  GraphABC;
 
var
  step, t: real; m, j, i: integer; P: array [1..4] of point; K: array [1..5] of point;
  xn, yn: integer; R, G, B: byte;
procedure DrawBezie(step, t: real; m, j, i: integer; xn, yn: integer; R, G, B: byte);
var
  P: array [1..4] of point; K: array [1..4] of point;
begin
  P[1].X := 200; P[1].Y := 500;
  P[2].X := 250; P[2].Y := 200;
  P[3].X := 600; P[3].Y := 200;
  P[4].X := 650; P[4].Y := 500;
  Line(P[1].X, P[1].Y, P[2].X, P[2].Y, rgb(R, G, B));
  
  Line(P[2].X, P[2].Y, P[3].X, P[3].Y, rgb(R, G, B));
  
  Line(P[3].X, P[3].Y, P[4].X, P[4].Y, rgb(R, G, B));
  xn := P[1].X; yn := P[1].Y; t := 0; step := 0.01; m := 4;
  K[1].X := P[1].X; K[1].Y := P[1].Y;
  K[2].X := P[2].X; K[2].Y := P[2].Y;
  K[3].X := P[3].X; K[3].Y := P[3].Y;
  K[4].X := P[4].X; K[4].Y := P[4].Y;
  while t < 1 do 
  begin
    for j := m downto 2 do
    begin
      for i := 1 to (j - 1) do 
      begin
        while t < 1 do
        begin
          K[i].x := K[i].x + round(t * (K[i + 1].x - K[i].x)); 
          K[i].y := K[i].y + round(t * (K[i + 1].y - K[i].y));
          Line(xn, yn, K[1].X, K[1].Y, rgb(R, G, B));
          
          Line(K[1].X, K[1].Y, K[2].X, K[2].Y, rgb(R, G, B));
          
          Line(K[2].X, K[2].Y, K[3].X, K[3].Y, rgb(R, G, B));
          
          Line(K[3].X, K[3].Y, K[4].X, K[4].Y, rgb(R, G, B));
          
          t := t + step; xn := K[1].X; yn := K[1].Y;
       K[1].X := P[1].X; K[1].Y := P[1].Y;
  K[2].X := P[2].X; K[2].Y := P[2].Y;
  K[3].X := P[3].X; K[3].Y := P[3].Y;
  K[4].X := P[4].X; K[4].Y := P[4].Y;
        end;
      end;
    end;
  end;
end;
 
begin
  writeln('Цвет: ');
  write('R:');
  read(R);
  writeln(R);
  write('G:');
  read(G);
  writeln(G);
  write('B:');
  read(B);
  writeln(B);
  clearwindow;
  DrawBezie(step, t, m, j, i, xn, yn, R, G, B);
end.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.10.2020, 18:03
Ответы с готовыми решениями:

В чем разница PascalABC.net и PascalABC
Скажите в чем разница PascalABC.net И PascalABC. Помню когда-то давно программы работающие в PascalABC у меня не работали в .net

Переделать программу из PascalABC в PascalABC.NET
program pr1 uses crt; const n=10; var i,k1,k2,c:integer; a,b:array of integer; BEGIN k1:=0; k2:=0; for i:=1 to n do begin ...

Установится ли PascalABC.NET на систему, где установлен только .NET 4.6.1?
Привет всем. Вопрос, собственно, озвучен выше. Конкретнее: есть компьютер со свежеустановленной Win10 x64, на которой присутствует...

3
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
07.10.2020, 07:46
Цитата Сообщение от musikh Посмотреть сообщение
Если t > 1, то идти к пункту 7
Это куда?
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
07.10.2020, 09:09
Цитата Сообщение от Puporev Посмотреть сообщение
Это куда?
Цитата Сообщение от musikh Посмотреть сообщение
4. Нарисовать отрезок с координатами (xn, yn, R[1].x, R[1].y);
2. t := t + step; xn := R[1].x; yn := R[1].y;
3. Если t > 1, то идти к пункту 7, иначе к пункту 2;
4. Конец.
4. Нарисовать отрезок с координатами (xn, yn, R[1].x, R[1].y);
5. t := t + step; xn := R[1].x; yn := R[1].y;
6. Если t >= 1, то идти к пункту 7, иначе к пункту 2;
7. Конец.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
07.10.2020, 09:24
Лучший ответ Сообщение было отмечено musikh как решение

Решение

Да, сразу не понял...
Кстати в алгоритме нет собстаенно рисования кривой.
Вот я что-то химичил с кривой Безье
Для 3х точек
Движение по кривой
Для 4х точек
Построение кривой Безье геометрическим способом
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2020, 09:24
Помогаю со студенческими работами здесь

VK.API на PascalABC.NET
Доброго времени суток, написал модуль для PascalABC.NET, с помощью которого можно использовать vkapi. Вот он: library VKAPI; ...

Анимация в PascalABC.NET
сделать анимацию по типу смены дня и ночи

PascalABC.NET , массив
Помогите пожалуйста дописать программу Program ex_3; const m: Array of real =...

Переписать на PascalABC.NET
program project1; const n = 10; type Tmas = ^TTmas;{одна строка матрицы} TTmas = array of integer; Tmatr =...

Новое в PascalABC.Net
Я буду сюда постить новые фичи этого языка (интересно, чем все закончится:)). Если Вы знаете какие-то новые фичи, то пожалуйста, отпишитесь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru