![]() |
Нарисовать окружность
Вложений: 1
Подскажите пожалуйста, что не так. Надо нарисовать окружность радиусом 40 с координатами 41 : 41.
(одна окружность там нарисована, нужна такая же, но большего диаметра) И как задать ширину линии. И если можно, то как ее в случае небходимости залить( простая). |
Окружность/точная/
_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 |
а мона еще по другому:
Код:
function drawCircle(name,div,color,linecolor,alpha,radius) {а еще вот так можно: Код:
_root.createEmptyMovieClip("circle", div); |
Цитата:
|
Штрек...
Ну чё ты.... Школа... пятый класс... 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 )! радуйтесь жизни... А ещё расскажите нам, какой из способов вы предпочли, спасибо! |
2 2K WebStudio
двоешник :) а вот это будет корявый угловатый тормазной вариант :) Код:
MovieClip.prototype.drawArc=function(x,y,radius,arc,startAngle,yRadius){ |
2 2K WebStudio
а вот это будет корявый угловатый тормазной вариант :) двоешник :) 2 Верас Ольга Код:
MovieClip.prototype.drawArc=function(x,y,radius,arc,startAngle,yRadius){ |
Лучше всего вот так:
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(); А потом менять размер мувика! Там было лево т.к. для маленьких окружностей шаг был слишком велик! Так его можно уменьшить!Только для маленьких... Для боьших - не надо... повиснуть может во всяком случае подгрузит комп... |
Цитата:
|
Ну да...
Это из хелпа... |
Чего за хрень.
У меня поделено на 8 секторов и ВПЕРЁД. Супер окружность получается. :D Вот ещё вариант с точн. 3зн. function circle_sh(name,rad,x_poz,y_poz){ this.createEmptyMovieClip("name", 1); with (this.name) { lineStyle(3, 0x00ffcc, 100); moveTo(-rad, 0); curveTo(-rad, -rad*0.383, -rad*0.707, -rad*0.707); curveTo(-rad*0.437, -rad, 0, -rad); curveTo(rad*0.437, -rad, rad*0.707, -rad*0.707); curveTo(rad, -rad*0.383, rad, 0); curveTo(rad, rad*0.383, rad*0.707, rad*0.707); curveTo(rad*0.437, rad, 0, rad); curveTo(-rad*0.437, rad, -rad*0.707, rad*0.707); curveTo(-rad, rad*0.383, -rad, 0); } this.name._x=x_poz this.name._y=y_poz } circle_sh(circle1,100,200,200) |
Что то вы товарищи извращаетесь. Есть отличный вариант от меня родимого:)
http://www.flash.plux.ru/board/viewtopic.php?t=109 Там не только окружность, но и эллипс, квадрат, диги и прочая дрянь. |
Цитата:
|
Цитата:
|
Всем спасибо
Всем большое спасибо. Попробую что-нибудь из перечисленного. Но все же что не так в том варианте, что я сбросила - FF.zip Что в нем поправить?
|
ну воспользовалась любезным предложением "Старины смерти". И каково энтот самый код не рисует окружность?
MovieClip.prototype.circle = function(x, y, r) { circleColor = (255); _root.prototype.circleStyle(10, circleColor, 100); _x = 100; _y = 100; _r = 50; 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); } }; |
2Верас Ольга
Цитата:
вот пример использования: Код:
// функция рисования окружности nuran'а |
Большое спасибо - это рисует. А задать сразу две окружности одним кодом сложно? Чтобы не ваять лишнее. Две окружности - одна вписана в другую - с общим центром ( без заливки).
Ну и уж последняя наглость - вращение какого -нибудь обьекта (скажем маленького кружка) по окружности? |
Цитата:
Шевели мозгами - полезно для общего развития. |
Цитата:
-------------------------------------------------------------------------------- MovieClip.prototype.circle = function(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); } }; this.createEmptyMovieClip("circle1",1) with(circle1){ lineStyle(5,0x000000,100) circle(0,0,50) _x=Stage.width/2 _y=Stage.height/2 } this.createEmptyMovieClip("circle2",2) with(circle1){ lineStyle(5,0x000000,100) circle(0,0,20) _x=Stage.width/2 _y=Stage.height/2 } -------------------------------------------------------------------------------- :) |
Можно просто продублировать circle1
и отскалить. |
Цитата:
-------------------------------------------------------------------------------- this.createEmptyMovieClip("circle2",2) with(circle2 ){ lineStyle(5,0x000000,100) circle(0,0,20) _x=Stage.width/2 _y=Stage.height/2 } -------------------------------------------------------------------------------- Цитата:
-------------------------------------------------------------------------------- MovieClip.prototype.circle = function(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); } }; this.createEmptyMovieClip("circle1",1) with(circle1){ lineStyle(5,0x000000,100) circle(0,0,50) _x=Stage.width/2 _y=Stage.height/2 } this.createEmptyMovieClip("circle2",2) with(circle2){ lineStyle(5,0x000000,100) circle(0,0,10) _x=Stage.width/2 _y=Stage.height/2 } // создаём функцию цыкла this.onEnterFrame=function(){ // обозначим радиус около которого вращается наша окружность this.radius1=50 // обозначим скорость движения(вращения) окружности (градус/на кадр) this.speed=2 // обозначим радианы this.rad=Math.PI/180 // движение и расчёт this.stepAngel+=this.speed /* приравниваем расчитанные координаты к малой //окружности с учётом расположения по центру */ this.circle2._x=Math.cos(this.stepAngel*this.rad)*this.radius1+Stage.width/2 this.circle2._y=Math.sin(this.stepAngel*this.rad)*this.radius1+Stage.height/2 } -------------------------------------------------------------------------------- |
Цитата:
|
Цитата:
или duplicateMovieClip("circle1", "circle2", 2); circle2._xscale=80; circle2._yscale=80; или this.createEmptyMovieClip("circle2",2) with(circle2 ){ lineStyle(5,0x000000,100) circle(0,0,20) _x=Stage.width/2 _y=Stage.height/2 } Думаю первый вариант попроще будет :D |
толщина линии как видишь меняется с размером, а я люблю всё чётко :) :D
|
Ну если толщина :D
Тогда просто this.createEmptyMovieClip("circle1", 1); with (circle1) { lineStyle(5, 0x000000, 100); circle(0, 0, 50); circle(0, 0, 20); _x = Stage.width/2; _y = Stage.height/2; } И ничего больше /кроме пропотипа/ |
2Штрек
может тогда проще рисовать прямо в руте без всяких мувиклипов? :) |
РУТ - ЭТО СЕРЬЁЗНО !!! :D
|
с приветом из ада
Цитата:
Какой я умный, оказывается... |
Всем большое спасибо. Ну Вы мужики и накрутили. Без ящика не разобраться. А всего лишь надо - нарисовать 2 окружности разного диаметра. И имитировать их вращение. Мне показалось, что проще всего вращать по этим окружностям какой-нибудь мелкий обьект - дабы он перекрывал сектор окружности - и этим имитировал их визуальное вращение (в разные стороны). И мне не очень ясно с толщиной окружности. Она что, привязана к ее радиусу?
____________________________________________ Имеется в виду проще, чем стряпать какую-то разорваную окружность да еще ее и вращать. Хотя может я и не права -Вам виднее - жираф большой ..... |
Имеется в виду проще, чем стряпать какую-то разорваную окружность да еще ее и вращать. Хотя может я и не права -Вам виднее - жираф большой .....
|
коротко и ясно - только так!
Цитата:
|
Цитата:
Нужно только прямые ссылки. Хоть это и увеличивает размер, зато быстрее. Это 100%. Можешь не сомневаться. |
бейте меня - бейте. Я вампир и становлюсь сильнее :)
Цитата:
|
Re: с приветом из ада
Цитата:
Цитата:
|
> А всего лишь надо - нарисовать 2 окружности разного
> диаметра. И имитировать их вращение. Вращать окружность? а смысл? > Мне показалось, что проще всего вращать по этим > окружностям какой-нибудь мелкий обьект - дабы он > перекрывал сектор окружности - и этим имитировал их > визуальное вращение (в разные стороны). > Имеется в виду проще, чем стряпать какую-то разорваную > окружность да еще ее и вращать. Если речь идет о вращении сектора, то второе как раз проще, например так: Код:
// функция рисования окружности nuran'а |
ЩАс Бум Пробовать
|
Все работает замечательно. Но хотелось бы задать еще один дурацкий вопрос: Как регулировать величину сектора разрыва
на окружности? . И все-таки еще: вращение MovieClip по заданному радиусу или эллипсоиду. И вообще какого эти орлы из Macromedia не могли сделать транслятор кода на базовые функции рисования. Ведь один черт все эти фунции реализовали в процессе написания кода fLASH. Что не могли написать конвертор в AS. Сильно бы облегчили жизнь пользователям (особенно начинающим). Ведь все-таки графический редактор у них уж очень убогий. Шаг сетки не задаш какой нужен. И море всего остального. Содрали бы реализацию графических функции у ACAD или PCAD. |
хе-хе
надо взять циркуль во флеш и нариовать круг !
тебе это зачем ? |
i'm the best flash developerzzzzzz
MovieClip.prototype.circle = function(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); } }; _root.onLoad = function() { fscommand("allowscale", false); cnx = Stage.width/2; cny = Stage.height/2; // precalculations rad = Math.PI/180; radius = 100; dot_radius = 20; preRadius = radius-dot_radius; preRad = 180*rad; // axises _root.createEmptyMovieClip("back", 1); back.lineStyle(0, 0xFF0000, 100); back.moveTo(cnx, cny-cny/1.1); back.lineTo(cnx, cny+cny/1.1); back.lineStyle(0, 0x00FF00, 100); back.moveTo(cnx-cnx/1.1, cny); back.lineTo(cnx+cnx/1.1, cny); // back circle _root.createEmptyMovieClip("bg", 2); bg.lineStyle(0, 0xFFFFFF, 100); bg.circle(0, 0, 100); bg._x = cnx; bg._y = cny; // dot _root.createEmptyMovieClip("dot", 3); dot.beginFill(0x0000FF, 100); dot.circle(0, 0, dot_radius); dot._x = cnx; dot._y = cny; dot.endFill(); // text _root.createTextField("text", 4, cnx+5, cny, 300, 20); format = new TextFormat(); format.color = 0xFFFFFF; format.font = "Verdana"; format.size = 14; text.text = "click and move your mouse"; text.setTextFormat(format); }; // ###################################################### // -- © 2003 Grigory A. Ryabov. // -- http://www.flash.plux.ru // -- Techmaker: Aleksey Shreider 8=) // ###################################################### _root.onMouseDown = function() { start = 1; }; _root.onMouseUp = function() { start = 0; }; _root.onEnterFrame = function() { var dx = cnx-_xmouse; var dy = cny-_ymouse; if (Math.sqrt(dx*dx+dy*dy)<=preRadius) { dot._x = _xmouse; dot._y = _ymouse; } else { angle = Math.atan2(dy, dx)-preRad; dot._x = Math.cos(angle)*preRadius+cnx; dot._y = Math.sin(angle)*preRadius+cny; } if (start) { var dx = cnx-_xmouse; var dy = cny-_ymouse; radius = Math.sqrt(dx*dx+dy*dy); preRadius = radius-dot_radius; bg._xscale = bg._yscale=radius; } }; |
| Часовой пояс GMT +4, время: 16:36. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.