Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Нарисовать окружность (http://www.flasher.ru/forum/showthread.php?t=50841)

Верас Ольга 02.11.2003 12:50

Нарисовать окружность
 
Вложений: 1
Подскажите пожалуйста, что не так. Надо нарисовать окружность радиусом 40 с координатами 41 : 41.
(одна окружность там нарисована, нужна такая же, но большего диаметра)
И как задать ширину линии. И если можно, то как ее в случае небходимости залить( простая).

Штрек 02.11.2003 13:18

Окружность/точная/
_root.createEmptyMovieClip("name", 1);
with (_root.name) {
lineStyle(1, 0x00ffcc, 100);
var rad=40

moveTo(-rad, 0);
curveTo(-rad, -rad*Math.SIN(Math.PI/180 * 22.5), -rad*Math.COS(Math.PI/180 * 45), -rad*Math.SIN(Math.PI/180 * 45));
curveTo(-rad*(1-Math.SIN(Math.PI/180 * 22.5))/Math.sqrt(2), -rad, 0, -rad);
curveTo(rad*(1-Math.SIN(Math.PI/180 * 22.5))/Math.sqrt(2), -rad, rad*Math.COS(Math.PI/180 * 45), -rad*Math.SIN(Math.PI/180 * 45));
curveTo(rad, -rad*Math.SIN(Math.PI/180 * 22.5), rad, 0);
curveTo(rad, rad*Math.SIN(Math.PI/180 * 22.5), rad*Math.COS(Math.PI/180 * 45), rad*Math.SIN(Math.PI/180 * 45));
curveTo(rad*(1-Math.SIN(Math.PI/180 * 22.5))/Math.sqrt(2), rad, 0, rad);
curveTo(-rad*(1-Math.SIN(Math.PI/180 * 22.5))/Math.sqrt(2), rad, -rad*Math.COS(Math.PI/180 * 45), rad*Math.SIN(Math.PI/180 * 45));
curveTo(-rad, rad*Math.SIN(Math.PI/180 * 22.5), -rad, 0);
}
_root.name._x=41
_root.name._y=41

Пушистик 02.11.2003 13:51

а мона еще по другому:

Код:

function drawCircle(name,div,color,linecolor,alpha,radius) {
    _root.createEmptyMovieClip("name", div);
    with (_root.name) {
        lineStyle(1, linecolor, 100);
        beginFill(color, alpha);
        moveTo(200, 200);
        curveTo(200, 180, 215, 165);
        curveTo(230, 150, 250, 150);
        curveTo(270, 150, 285, 165);
        curveTo(300, 180, 300, 200);
        curveTo(300, 220, 285, 235);
        curveTo(270, 250, 250, 250);
        curveTo(230, 250, 215, 235);
        curveTo(200, 220, 200, 200);
        endFill();
        _width=radius;
        _height=radius;
    }
}
drawCircle(name,5,0x000000,0xFFFF00,30,40);

правда нуна буит координаты приобразовать через :) globalToLocal();....

а еще вот так можно:

Код:

_root.createEmptyMovieClip("circle", div);
with (_root.circle) {
    lineStyle(100, 0x000000, 100);
    moveTo(200, 200);
    lineTo(202.5,202.5);
}

:D

Штрек 02.11.2003 14:31

Цитата:

Оригинал написал(а) Пушистик
Последний - лихой вариант :D

2K WebStudio 02.11.2003 14:37

Штрек...
Ну чё ты....
Школа... пятый класс...
r=10;
mc = _root.createEmptyMovieClip("okr", 1);
with (mc) {
beginFill(0x000000, 0);
lineStyle(1, 0x000000, 100);
moveTo(-1*_root.r, 0);
for (x=_root.r*-1; x<=_root.r; x++) {
y = Math.sqrt(Math.pow(_root.r,2)-Math.pow(x, 2));
lineTo(x, y);
}
for (x=_root.r; x>=-1*_root.r; x--) {
y = -1*Math.sqrt(Math.pow(_root.r,2)-Math.pow(x, 2));
lineTo(x, y);
}
endFill();
}
mc.onPress=function(){
startDrag(this,false);
onMouseUp=function(){
stopDrag();
}
}

Вот!
радиус - первая же переменная ( r )!
радуйтесь жизни...
А ещё расскажите нам, какой из способов вы предпочли, спасибо!

Techmaker 02.11.2003 14:41

2 2K WebStudio
двоешник :)
а вот это будет корявый угловатый тормазной вариант :)

Код:

MovieClip.prototype.drawArc=function(x,y,radius,arc,startAngle,yRadius){
if(yRadius==undefined){yRadius=radius}
if(Math.abs(arc)>360){arc=360}
segs=Math.ceil(Math.abs(arc)/45)
segAngle=arc/segs
theta=-(segAngle/180)*Math.PI
angle=-(startAngle/180)*Math.PI
ax=x-Math.cos(angle)*radius
ay=y-Math.sin(angle)*yRadius
if(segs>0){for(i=0;i<segs;i++){
angle+=theta
angleMid=angle-(theta/2)
bx=ax+Math.cos(angle)*radius
by=ay+Math.sin(angle)*yRadius
cx=ax+Math.cos(angleMid)*(radius/Math.cos(theta/2))
cy=ay+Math.sin(angleMid)*(yRadius/Math.cos(theta/2))
this.curveTo(cx,cy,bx,by)}}}

with(this.createEmptyMovieClip("circle",1)){my_radius=Math.sqrt(Stage.width*Stage.width+Stage.height*Stage.height)/5;lineStyle(5,0xFF0000,100);beginFill(0x000000,50);moveTo(My_radius,0);drawArc(my_radius,0,my_radius,360,0);_x=Stage.width/2;_y=Stage.height/2}


Techmaker 02.11.2003 14:54

2 2K WebStudio
а вот это будет корявый угловатый тормазной вариант :)
двоешник :)

2 Верас Ольга
Код:

MovieClip.prototype.drawArc=function(x,y,radius,arc,startAngle,yRadius){
if(yRadius==undefined){yRadius=radius}
if(Math.abs(arc)>360){arc=360}
segs=Math.ceil(Math.abs(arc)/45)
segAngle=arc/segs
theta=-(segAngle/180)*Math.PI
angle=-(startAngle/180)*Math.PI
ax=x-Math.cos(angle)*radius
ay=y-Math.sin(angle)*yRadius
if(segs>0){for(i=0;i<segs;i++){
angle+=theta
angleMid=angle-(theta/2)
bx=ax+Math.cos(angle)*radius
by=ay+Math.sin(angle)*yRadius
cx=ax+Math.cos(angleMid)*(radius/Math.cos(theta/2))
cy=ay+Math.sin(angleMid)*(yRadius/Math.cos(theta/2))
this.curveTo(cx,cy,bx,by)}}}

with(this.createEmptyMovieClip("circle",1)){
my_radius=Math.sqrt(Stage.width*Stage.width+Stage.height*Stage.height)/5
lineStyle(5,0xFF0000,100)
beginFill(0x000000,50)
moveTo(My_radius,0)
drawArc(my_radius,0,my_radius,360,0)
_x=Stage.width/2;_y=Stage.height/2}

извеняюсь за второй топ :)

2K WebStudio 02.11.2003 14:59

Лучше всего вот так:
lineStyle( 0, 0x0000FF, 100 );
beginFill( 0xFF0000 );
moveTo( 500, 500 );
curveTo( 600, 500, 600, 400 );
curveTo( 600, 300, 500, 300 );
curveTo( 400, 300, 400, 400 );
curveTo( 400, 500, 500, 500 );
endFill();
А потом менять размер мувика!
Там было лево т.к. для маленьких окружностей шаг был слишком велик!
Так его можно уменьшить!Только для маленьких...
Для боьших - не надо... повиснуть может во всяком случае подгрузит комп...

Techmaker 02.11.2003 15:09

Цитата:

Оригинал написал(а) 2K WebStudio
Лучше всего вот так:
lineStyle( 0, 0x0000FF, 100 );
beginFill( 0xFF0000 );
moveTo( 500, 500 );
curveTo( 600, 500, 600, 400 );
curveTo( 600, 300, 500, 300 );
curveTo( 400, 300, 400, 400 );
curveTo( 400, 500, 500, 500 );
endFill();

а разве это окружность? :)

2K WebStudio 02.11.2003 15:36

Ну да...
Это из хелпа...


Часовой пояс GMT +4, время: 12:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.