![]() |
|
||||||||||
|
|||||
|
Помогите программно нарисовать прямоугольник с скруглёным углами.
С анкорами коекак разобрался методом подбора, а с контролами не получается. вот что вышло: function rad(deg) { return Math.PI / 180 * deg; } var mc = this.createEmptyMovieClip('mc', 5); mc._x = 10 mc._y = 10 mc.lineStyle(1, 0x000000, 100); // // прорисовываем друг за другом сторону -> угол function drawRoundRec(w, h, r){ mc.moveTo(w-r, h); drawConer(r, 0, w-r, h-r); mc.lineTo(w, r); drawConer(r, 90, w-r, r); mc.lineTo(r, 0); drawConer(r, 180, r, r); mc.lineTo(0, h-r); drawConer(r, 270, r, h-r); mc.lineTo(w-r, h); } function drawConer(r, a, x, y){ var count = 3; // кол-во кривых на угол var step = rad(90 / count); var step1 = rad(a); // сектор for( var i = 0; i < count; i++){ step1 += step; x1 = r * Math.sin(step1); y1 = r * Math.cos(step1); cx = x; cy = y; mc.curveTo(cx ,cy, x1+x , y1+y); } } drawRoundRec(600, 400, 30); Может что-то готовое есть? спасибо |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
function rad(deg) { return Math.PI / 180 * deg; } var mc = this.createEmptyMovieClip('mc', 5); mc._x = 10 mc._y = 10 mc.lineStyle(1, 0x000000, 100); // // прорисовываем друг за другом сторону -> угол function drawRoundRec(w, h, r){ mc.moveTo(w-r, h); drawConer(r, 0, w-r, h-r); mc.lineTo(w, r); drawConer(r, 90, w-r, r); mc.lineTo(r, 0); drawConer(r, 180, r, r); mc.lineTo(0, h-r); drawConer(r, 270, r, h-r); mc.lineTo(w-r, h); } function drawConer(r, a, x, y){ var count = 10; // кол-во кривых на угол var step = rad(90 / count); var step1 = rad(a); // сектор for( var i = 0; i < count; i++){ if (i == 0) { x1 = r * Math.sin(step1); y1 = r * Math.cos(step1); mc.moveTo(x1+x, y1+y); } step1 += step; x1 = r * Math.sin(step1); y1 = r * Math.cos(step1); cx = x; cy = y; // mc.curveTo(cx ,cy, x1+x , y1+y); mc.lineTo(x1+x , y1+y); } } drawRoundRec(600, 400, 30); ps. Вместо curveTo я использовал moveTo+lineTo. Последний раз редактировалось rainbowrussia; 14.08.2010 в 15:51. |
|
|||||
|
Если толщина нечётная можно рисовать её со смещением в .5 "пикселя".
Но вопрос был в том как это сделать курвами. Отрезками я и сам могу. Всёравно спасибо. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
Пардон, не уловил ваш замысел сразу.
Тогда вопрос - зачем вам отдельная процедура с итерационным построением закругления? Курвами все делается проще и без тригонометрии: var mc = this.createEmptyMovieClip('mc', 5); mc._x = 10 mc._y = 10 mc.lineStyle(1, 0x000000, 100); // // прорисовываем друг за другом сторону -> угол function drawRoundRec(x, y, w, h, r){ mc.moveTo(x + r, y); mc.lineTo(x + w - r, y); mc.curveTo(x + w, y, x + w, y + r); mc.lineTo(x + w, y + h - r); mc.curveTo(x + w, y + h, x + w - r, y + h); mc.lineTo(x + r, y + h); mc.curveTo(x, y + h, x, y + h - r); mc.lineTo(x, y + r); mc.curveTo(x, y, x + r, y); } drawRoundRec(100, 50, 400, 200, 30); Последний раз редактировалось rainbowrussia; 14.08.2010 в 20:24. |
|
|||||
|
Действительно, одной кривой на угол, визульно, вроде, вполне достаточно.
Спасибо. |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|