![]() |
как разместить n кружочков по кругу через n пикселей?
subj. по математике у меня 1, поэтому вот это, например,
function pointOnCircle (x, y, r, t) { // do maths here theta=t*math.pi/180; sinTheta=math.sin(theta); cosTheta=math.cos(theta); endX=x+r*cosTheta; endY=y+r*sinTheta; } ничего мне не говорит. можно объяснить? мне надо всего лишь n кругов положить по границе одного большого круга. когда n большое, видимо, радиус круга основного надо делать больше, чтоб всё влезло... но как получить x & y координаты на этом круге через определённое расстояние - не пойму никак совсем, ага! помогите, пожалуйста. |
зачем левой пяткой чесать правое ухо?
лучше смести центр кружочка в середину воображаемой окружности, потом сдупликать массив и повращай его.
И ресурсы экономятся, и время. |
хммм.... собственно, вот это произвело нужный эффект, но почму оно работает понять - выше моих сил. надо было учицца в школе, надо было... j - в цикле for(j=blahblah etc.
angle = j * Math.PI*2/7; eval("root"+j)._x = Math.sin(angle)*radius + Stage.width/2; eval("root"+j)._y = Math.cos(angle)*radius + Stage.height/2; что замечательно, стоит в первой строке написать, например, 4, как расстояние между кругами увеличиваецца. поистине, чудесная наука - математика... или тригонометрия... волшебная. нифига не понятно, а работает. даже стыдно. |
ну вот
рассказываешь тут про простоту жизни, а они все крылья к свиньям цепляють...
Знаешь, это уместно использовать в том противном случае, когда точно не знаешь, какая у тебя в радиусе воображаемая окружность. А ежели все известно, то не стоит так сильно машину этим грузить. Ну дело твое. Хороший понт дороже денег. Сам так же мучаюсь. Потому как надо было мне внимательнее основы тригонометрии в школе проходить. кхм... |
2 jungler
А бросьте, пожалуйста хоть примерный исходник использования вашей функции, а то я математику во всех видах(почти, правда) учил, а вот со флешем, вижу, не очень
|
да я вот как раз и не знаю, какой радиус. чем больше кружочков - тем больше радиус :))) код вот он: парит xml и рисует на каждый узел по кружочку, так скажем. что-то вроде mind map...
function expandNode(node, parent){ if(parent==null){ createEmptyMovieClip("origin", 1); origin._x = Stage.width/2; origin._y = Stage.height/2; parent=origin; } parent.createEmptyMovieClip("_P"+parent._name, 1);//holds all leafs in the current node var cp = eval(parent+"._P"+parent._name); trace(parent); trace(cp); var total = node.childNodes.length; var radius = total*10; for(i=0; i<total; i++){ var n = node.childNodes[i]; var nm = n.nodeName; var angle = i * Math.PI*2/total; eval(parent+"._P"+parent._name).attachMovie(nm, "_"+nm+i, i); var mc = eval(parent+"._P"+parent._name+"._"+nm+i); mc.message = n.attributes["name"]; mc.node = n; mc._x = Math.sin(angle)*radius-80; mc._y = Math.cos(angle)*radius-80; mc.onRelease = function(){ expandNode(mc.node, mc); } } } только учтите, код очень сырой - я второй день этим занимаюсь. в общем, если надо подробности phil@land.ru |
Вложений: 1
да я лучче файл пришпилю. смотрите, в общем, хочу сделать чтобы было очень просто. чтобы поддержка была максимально простой. и сдаётся мне, что кто-то это делал, но сорцов не найду никак. приходится изучать-с, да ;(
|
На. Понятие радиус здесть отсутствует.
rad = Math.PI/180; n=21;//кружочков angle=0; x=50; y=50; s._x=s._y=50; leng=40; // расстояние между кружочками dangle=360/n; for(i=1;i<n;i++){ angle+=dangle; x+=leng*Math.cos(angle*rad); y+=leng*Math.sin(angle*rad); s.duplicateMovieClip("s"+i,i,{_x:x,_y:y}); } |
спасибо:) хотя дело не в радиусе. после всего прочтённого мной на эту тему за последние Н дней это уже скорее академический вопрос :)
|
| Часовой пояс GMT +4, время: 10:44. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.