Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2022, 00:13   #1
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
Сообщение Рисование кривой Безье

нужно нарисовать кривую Безье:
а) обычный алгоритм(я реализовал только этот пункт)
б)алгоритм де Кастельо
в) составная кривая, рациональная кривая Безье
Помогите реализовать другие два пункта
#код обычного алгоритма кривой Безье
Код:
import pygame
from sys import exit
#цвет фона, линий между точками и цвет самой кривой. 
BLACK = (0,0,0)
WHITE = (100,100,100)
RED = (230, 0, 0)
dots = []#список для опорных точек
curve = []#список координат точек кривой
press = 0#переменная,которая является флагом
pygame.init()
screen = pygame.display.set_mode((1000, 600))
clock = pygame.time.Clock()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_TAB:#добавляется событие на клавишу TAB для сброса всех данных
                dots = []
                curve = []
                press = 0
        if event.type == pygame.MOUSEBUTTONDOWN:#при нажатии левой кнопки мыши перебираю значения флага.
            if event.button ==1:
                if press == 0:#случай, когда флаг нулевой
                    press = 1
                    dots = [event.pos, event.pos, event.pos, event.pos]#добавление 4 точки со значениями позиции нажатия.
                elif press == 1:
                    press = 2
                elif press == 2:
                    press = 3
                elif press == 3:
                    press = -1
#Далее обработка события движения мыши по экрану. В зависимости от значения флага — меняется соответствующая точка
        if event.type == pygame.MOUSEMOTION:
            if press == 1:
                dots[3] = event.pos
            elif press == 2:
                dots[2] = event.pos
            elif press == 3:
                dots[1] = event.pos
    screen.fill(BLACK)
    if dots:
        pygame.draw.aalines(screen, WHITE, False, dots)#переход к отрисовке,
        for dot in dots:
            pygame.draw.circle(screen, WHITE, dot, 5, 1)#Добавление выделения опорных точек с помощью окружностей
        curve = []#Обнуление списка  точкек кривой, чтобы динамически рисовать её каждый кадр.
        for i in map(lambda x: x/100.0, range(0, 105, 5)):#Чтобы пройтись по дробным значениям t нам не подойдёт стандартный range – используем map в связке с лямбда функцией для генерации списка с дробными значениями и проходим по нему.
            x = (1.0-i)**3*dots[0][0] + 3*(1.0-i)**2*i*dots[1][0] + 3*(1.0-i)*i**2*dots[2][0] + i**3*dots[3][0]#Для значения X и Y используем формулу кубической кривой.
            y = (1.0-i)**3*dots[0][1] + 3*(1.0-i)**2*i*dots[1][1] + 3*(1.0-i)*i**2*dots[2][1] + i**3*dots[3][1]
            curve.append([x, y])
        pygame.draw.lines(screen, RED, False, curve, 3)#рисуется ломанная кривая
 
    pygame.display.flip()
    clock.tick(30)
himecu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] Как с помощью Chart построить график кривой, если известны координаты двух точек, лежащих на кривой, и радиус кривизны? Amannazar Компоненты Delphi 1 25.08.2019 11:10
Расстояние до кривой Безье Pavia Общие вопросы по программированию, компьютерный форум 3 11.06.2017 22:09
Растеризация кривой Безье. Braun1408 Помощь студентам 4 06.04.2013 18:01
Кривая Безье. Muaxaxa Общие вопросы Delphi 2 28.11.2011 01:03
Построение кривой безье. faustinus Помощь студентам 1 26.12.2010 18:02