Просмотр полной версии : как разместить 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, как расстояние между кругами увеличиваецца. поистине, чудесная наука - математика... или тригонометрия... волшебная. нифига не понятно, а работает. даже стыдно.
рассказываешь тут про простоту жизни, а они все крылья к свиньям цепляють...
Знаешь, это уместно использовать в том противном случае, когда точно не знаешь, какая у тебя в радиусе воображаемая окружность.
А ежели все известно, то не стоит так сильно машину этим грузить.
Ну дело твое.
Хороший понт дороже денег. Сам так же мучаюсь.
Потому как надо было мне внимательнее основы тригонометрии в школе проходить.
кхм...
А бросьте, пожалуйста хоть примерный исходник использования вашей функции, а то я математику во всех видах(почти, правда) учил, а вот со флешем, вижу, не очень
да я вот как раз и не знаю, какой радиус. чем больше кружочков - тем больше радиус :))) код вот он: парит 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
да я лучче файл пришпилю. смотрите, в общем, хочу сделать чтобы было очень просто. чтобы поддержка была максимально простой. и сдаётся мне, что кто-то это делал, но сорцов не найду никак. приходится изучать-с, да ;(
greyshaman
01.08.2002, 13:11
На. Понятие радиус здесть отсутствует.
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});
}
спасибо:) хотя дело не в радиусе. после всего прочтённого мной на эту тему за последние Н дней это уже скорее академический вопрос :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.