Листинг 3.14. Рисование дуги окружности

void drawArc(Point2 center, float radius, float startAngle, float sweep) {

// startAngle and sweep are in degrees

// startAngle и sweep измеряются в градусах

const int n - 30: // number of intermediate segments in arc // число промежуточных отрезков дуги

float angle - startAngle * 3.14159265 / 180: // initial angle in radians // начальный угол в радианах

float anglelnc - sweep * 3.14159265 /(180 * n): // angle increment // увеличение угла

float cx center.getXO. cy - center.getYO:

cvs.moveTo(cx + radius * cos(angle), cy + radius * sin(angle)): fordnt k - 1: k < n: k++. angle +- anglelnc)

cvs.lineTo(cx + radius * cos(angle). cy + radius * sin(angle)):

}

CP остается в последней точке дуги. В ряде случаев предпочитают опускать начальную команду moveToO по направлению к первой точке дуги, чтобы соединить дугу с той фигурой, которая была нарисована к моменту вызова drawArcC).

Значительно более быстрая подпрограмма рисования дуги, которая рассматривается в главе 5, не проделывает многократно повторяющихся вычислений функций sin( ) и cos( ). Вместо приведенной здесь процедуры можно с успехом использовать ту подпрограмму.

Располагая функцией drawArcO, нетрудно написать подпрограмму drawCircle(Point2 center, float radius), рисующую окружность целиком. (Как?)

Подпрограмма drawCircleO вызывается спецификацией центра (center) и радиуса (radius), однако существуют другие способы описания окружности, которые имеют широкое применение в интерактивной графике и автоматизированном проектировании. Вот два самых известных из них.

3.7. Рисование окружностей и дуг

1. Задаются центр и точка на окружности. В этом случае подпрограмму сігаїЛі гс!е() можно использовать, если известен радиус. Если с - центр, ар - заданная точка на окружности, то радиус просто равен расстоянию от с до р, которое легко найти с помощью обычной теоремы Пифагора.

2. Заданы три точки, через которые должна пройти окружность. Известно, что через три точки, не лежащие на одной прямой, проходит единственная окружность. В главе 4 обсуждается, как определить центр и радиус этой окружности.


⇐ Предыдущая| |Следующая ⇒