![]() |
Посмотрите, если интересен факт создания круга из четырёх кривых Безьё
Смотреть здесь:
http://www.flash.plux.ru/lab/flash/preview/2dspline/ Если понравится, качать здесь: http://www.flash.plux.ru/board/viewtopic.php?t=158 |
факт создания круга кривыми безье не новый и давно и многими реализован, а вот ElasticCircle довольно прикольно и мне понравился.
|
Цитата:
|
это не круг. хотя и похоже.
http://www.bunker6.com/round.gif |
Цитата:
|
Цитата:
|
Цитата:
А вот и кодик из одного мануала: function radians(degrees) { return (Math.PI/180)*degrees; } theta = 45; r = 100; d = r/Math.cos(radians(0.5*theta)); this.lineStyle(1, 0x000000, 100); this.moveTo(r, 0); for (k=(theta/2); k<361; k=k+theta) { xControl = d*Math.cos(radians(k)); yControl = d*Math.sin(radians(k)); xAnchor = r*Math.cos(radians(k+(theta/2))); yAnchor = r*Math.sin(radians(k+(theta/2))); this.curveTo(xControl, yControl, xAnchor, yAnchor); } Вполне ровненький круг выдает. |
я говорил о геометрически правильном круге. тоесть без смещения на несколько пикселей.
кого это интересует? бункера. чуть-чуть ;) |
Цитата:
Так это, там в коде есть такой коэфициент = 0.4. Если его точно подобрать,то круг получится, ну конечно не с точностью в 1 пиксель, но в два то точно. Самое главное - его нужно правильно подобрать. Я выставил 0.4, но нужно было видимо ещё повозится. |
Цитата:
Цитата:
я просто за название вещей своими именами. этот "круг нурана" очевидно (невооруженными очами видно) не круглый. можно было бы взять побольше точек(или сделать поменьше размер) и это было бы кругом. Цитата:
если, конечно, это кому-нибудь надо =) nuran, а вообще, прикольно. |
Цитата:
|
Цитата:
Есть один маленкий постулат, любую кривую можно описать дугами. вано действует и в другую сторону. |
ну так может нарисуеш...
|
да в общем то, тут есть, в том числе в моем исполнении, пошукай. :)
|
Цитата:
А если простой круг нужно нарисовать, то вот к примеру прототип мой (здесь кривые безьё совершенно не при чём и никакого тебе кайфа :): MovieClip.prototype.circle = function(x, y, r) { // Функция: circle // // Описание: Рисует окружность. // x, y - координаты центра // r - радиус окружности var mas = new Array(); var step = 16; var angle = 360/step; var rad = Math.PI/180; for (var i = 0; i<=step; i++) { mas[i] = new Object(); mas[i].x = Math.cos(angle*rad*i)*r+x; mas[i].y = Math.sin(angle*rad*i)*r+y; } this.moveTo(mas[0].x, mas[0].y); for (var i = 0; i<step; i += 2) { // curveThreeTo var cx = 2*mas[i+1].x-0.5*(mas[i].x+mas[i+2].x); var cy = 2*mas[i+1].y-0.5*(mas[i].y+mas[i+2].y); this.curveTo(cx, cy, mas[i+2].x, mas[i+2].y); } }; |
так вся фишка и идёт про кривые безье.
2greyshaman не нашёл. подтолкни на нужный след. уж очень интерестно просто я до сих пор был убеждён, что не реально нарисовать круг кривыми безье (опять же про нормальный круг). В принципе невозможность этого мне доказал Гурвиц. |
дядька Брезенхейм нам казал что окружность на матрице можно нарисовать с точностью около 0.7
запусти ниже следующее и посмотри на радиус который возвращают точки полученные по Безье. r=100; num=8; ang=0; dang=Math.PI/num; while(ang<2*Math.PI){ x1=r*Math.cos(ang); y1=r*Math.sin(ang); x2=2*r*Math.cos(ang+dang)-0.5*r*(Math.cos(ang)+Math.cos(ang+2*dang)); y2=2*r*Math.sin(ang+dang)-0.5*r*(Math.sin(ang)+Math.sin(ang+2*dang)); x3=r*Math.cos(ang+2*dang); y3=r*Math.sin(ang+2*dang); calc (x1,x2,x3,y1,y2,y3); ang+=2*dang; } function B1 (t) { return (t*t); } function B2 (t) { return (2*t*(1-t)); } function B3 (t) { return ((1-t)*(1-t)); } function calc (x1,x2,x3,y1,y2,y3) { count = 0; detailBias = 1/59; level = 1; do { x = x1*B1(count)+x2*B2(count)+x3*B3(count); y = y1*B1(count)+y2*B2(count)+y3*B3(count); r=Math.sqrt(x*x+y*y); trace(r); count += detailBias; } while (count<=1); } |
| Часовой пояс GMT +4, время: 04:23. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.