![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Цитата:
|
|
|||||
|
Регистрация: Aug 2001
Адрес: vg
Сообщений: 352
|
Цитата:
Есть один маленкий постулат, любую кривую можно описать дугами. вано действует и в другую сторону. |
|
|||||
|
ну так может нарисуеш...
|
|
|||||
|
Регистрация: Aug 2001
Адрес: vg
Сообщений: 352
|
да в общем то, тут есть, в том числе в моем исполнении, пошукай.
![]() |
|
|||||
|
Регистрация: Apr 2003
Адрес: DC
Сообщений: 4,489
|
Цитата:
![]() А если простой круг нужно нарисовать, то вот к примеру прототип мой (здесь кривые безьё совершенно не при чём и никакого тебе кайфа :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); } };
__________________
flash/flex/unity |
|
|||||
|
так вся фишка и идёт про кривые безье.
2greyshaman не нашёл. подтолкни на нужный след. уж очень интерестно просто я до сих пор был убеждён, что не реально нарисовать круг кривыми безье (опять же про нормальный круг). В принципе невозможность этого мне доказал Гурвиц. |
|
|||||
|
Регистрация: Aug 2001
Адрес: vg
Сообщений: 352
|
дядька Брезенхейм нам казал что окружность на матрице можно нарисовать с точностью около 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, время: 19:05. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|