Форум программистов, компьютерный форум CyberForum.ru

Растеризация кривой второго порядка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Заполнить массив случайными числами по возрастанию и убыванию http://www.cyberforum.ru/cpp-beginners/thread168272.html
Случайными числами 0..700 по возрастанию и убыванию
C++ Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели или сообщение об ошибке, если введены неправильные данные. http://www.cyberforum.ru/cpp-beginners/thread168261.html
Факториал C++
Помогите написать программу: Составить функцию, которая вычисляет сумму К слагаемых. В вызывающей функции main() организовать контроль ввода положительного целого K, большего 0. Через do... while или while или for -------------- В знаменателе 2n-1, а что делать со степенью x и меняющимися знаками??
C++ Определение колличества членов ak псоледовательности
Помогите пожалуйста подправить программу. Нужно Определить количество членов ak последовательности а1,....,аn, являющихся нечетными числами. #include <iostream> #include <conio.h> int S=0; int n; int main() { std::cout <<"vvedite n"; std::cin >>n; int a;
C++ Описать класс "Матрица" http://www.cyberforum.ru/cpp-beginners/thread168246.html
я как бэ в поиске нашел но мне бы хотелось узнать обязательно ли матрица должна быть динамической и можно написать метод для ввода и вывода матрицы? а то я пытался сделать но чего-то работает неверно...
C++ Перемножение двух чисел Никак не могу понять в чем ошибка в таком простом коде #pragma argsused #include <iostream.h> #include <conio.h> #include <math.h> #include <stdio.h> #include <clx.h> #pragma hdrstop подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
25.09.2010, 18:11     Растеризация кривой второго порядка
Плохо проверял, я в уравнении прямой накосячил.
Уравнение прямой, параллельной вектору V = {D; E} выглядит так: E*x - D*y + F = 0
Тогда уравнение перпендикуляра x + (2*A*t + B) * y + F = 0
Подставив x(t), y(t) получим t + (2*A*t + B) * (A*t^2 + B*t + C) + F = 0
и F = - (2*A^2*t^3 + 3*A*t^2*B + (1+2*A*C+B^2)*t + B*C)
Получается кубическое уравнение, которое всегда имеет хотя бы один вещественный корень (что соответствует смыслу - для любой точки P0 на плоскости найдётся как минимум одна точка P1 на параболе, из которой можно провести перпендикуляр, проходящий через P0). Оно решается по формуле Кардано, ну и далее как раньше.

Далее, о закраске. Интенсивность должна зависеть от расстояния до кривой не пороговым образом. Простейший случай - линейная зависимость, когда для линии толщиной 2*r0 интенсивность закраски, измеряемая по шкале от 0 до 1 (от пустого пикселя до наиболее интенсивного) вычисляется как I(r) = (r<r0) ? (r0-r)/r0 : 0;

С цветом пикселя удобнее работать, "разобрав" его на отдельные целочисленные компоненты, которые после нужных преобразований приводятся в диапазон от 0 до 255 и "собираются" вместе.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
inline unsigned int clamp(int cc)
{
    if(cc<0)
        return 0;
    if(cc>255)
        return 255;
    return static_cast<unsigned int>(cc);
}
 
struct rgb {
    int r, g, b;
    rgb(unsigned char R, unsigned char G, unsigned char B): r(R), g(G), b(B) {}
    rgb(unsigned int color=0): r(color & 0xFF), g((color >> 8)&0xFF), b((color>>16)&0xFF) {}
    operator unsigned int () const {return clamp(r) | (clamp(g)<<8) | (clamp(b)<<16);}
}
 
Текущее время: 23:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru