Cybernavigator Posted April 22, 2009 at 07:27 AM Report #258128 Posted April 22, 2009 at 07:27 AM Boas, passei a noite a matutar nesta coisa, e não consigo perceber, aposto que é uma cena simples que me está a faltar. Imaginem um circulo com um certo raio. Eu quero saber quantos circulos à volta dele consigo criar, sabendo eu o raio, o espaço entre eles e o raio de cada circulo. Vejam esta animação e percebem bem do que estou praqui a falar http://flashden.net/item/balls-of-light-preloader/10855 tentei relacionar com isto http://www.actionscript.org/resources/articles/168/3/Dynamic-masking-using-the-drawing-API/Page3.html mas visto que nem dormi a tentar resolver e sei que não estoua conseguir por estupidez, vou parar umas horas e esperar que vocês me dêem uma mãozinha 😛 obrigado desde já Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico***
Tharis Posted April 22, 2009 at 08:05 AM Report #258134 Posted April 22, 2009 at 08:05 AM Sabendo o raio do círculo criado por todos os círculozinhos à volta, tens o perímetro: 2*pi*R Seja r o raio de cada círculozinho, e s o espaço entre eles, só precisas de fazer: 2*pi*R / (2*r+s) Ou seja, divides o perímetro do círculo maior pela soma do diâmetro de cada círculo pequeno e o espaço entre os círculos pequenos. Podes fazer esta aproximação (arco que passa pelo círculozinho e pertence à circunferência maior ser igual ao raio do círculozinho) porque são distâncias muito pequenas. Não sei se a distância entre os círculos te é dada em arco ou distância em linha recta.
Cybernavigator Posted April 22, 2009 at 08:27 AM Author Report #258143 Posted April 22, 2009 at 08:27 AM Claro, faz sentido =D Pá sabendo que o espaço é dado em linha recta como faço para tirar o arco disso? :S essa já me ultrapassa mesmo. Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico***
Cybernavigator Posted April 22, 2009 at 09:36 AM Author Report #258173 Posted April 22, 2009 at 09:36 AM Grr, não estou a conseguir. function addDot(numero,raio,dotRadius,espaçoEntreEles) { numero *= espaçoEntreEles; var x1 = raio*Math.sin(numero*Math.PI/180); var x2 = raio*Math.sin((numero+dotRadius)*Math.PI/180); var y1 = raio*Math.cos((numero)*Math.PI/180); var y2 = raio*Math.cos((numero+dotRadius)*Math.PI/180); var dot:MovieClip = new MovieClip(); with(dot.graphics) { trace("x: "+(x2+x1)/2+" | y: " + (y2+y1)/2 + " | Num: " + numero) ; beginFill(0x000000); drawCircle((x2+x1)/2,(y2+y1)/2,dotRadius); endFill(); } addChild(dot); dot.x = stage.stageWidth/2; dot.y = stage.stageHeight/2; } traduzindo, o espaço entre eles, não é nada mais que o arco que faz, ha alguma forma de saber quantos circulos sao feitos no minimo para fazer 1 circulo completo? Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico***
pedrosorio Posted April 22, 2009 at 11:33 AM Report #258208 Posted April 22, 2009 at 11:33 AM sabendo eu o raio, o espaço entre eles e o raio de cada circulo Não podes. Se sabes o raio do grande, o espaço entre eles e o raio de cada círculo estás a colocar-te numa situação de erro à partida porque essa combinação pode não ser possível. Para além disso o que faz sentido é teres o espaçamento dado em unidades do perímetro da circunferência grande, isto é, em arco. Em relação à aproximação, sim e não, depende do dimensão dos círculos exteriores. Se forem de facto muito pequenos como no exemplo que deste é válida, mas no caso geral não. Para teres noção de que dimensão é essa (aprox. igual ao diâmetro dos círculos se estes forem mto pequenos) só tens que considerar a tua circunferência grande de raio R e uma pequena de raio r. Por simplicidade faz a grande centrada na origem e a pequena à direita, isto é com (xc=R,yc=0). http://img529.imageshack.us/img529/6733/circulo.jpg A ideia é determinar o ângulo entre os dois pontos de intersecção, que, devido à escolha que fiz de posicionamento da circunferência pequena, será 2 * teta. Basta-nos escrever um sistema a duas equações que represente as duas circunferências: X^2 + Y^2 = R^2 (1) (X-R)^2 + Y^2 = r^2 (2) Desenvolvendo (2): X^2 - 2XR + R^2 + Y^2 = r^2 <=> X^2 + Y^2 = r^2 - R^2 + 2XR Substituindo em (1): r^2 - R^2 + 2XR = R^2 <=> X = (2R^2 - r^2)/(2R) Podemos reescrever (1): Y = sqrt(R^2 - X^2) = sqrt( R^2 - ((2R^2 - r^2)/(2R))^2) Já temos (xi,yi) em função de r e R que conhecemos à partida, portanto o teu programa pode calcular estes dois valores. Calcular teta resume-se a fazer o arctg(yi/xi) - presumo que exista alguma biblioteca math ou algo do género que te permita fazer isto. Tendo o ângulo teta temos 2*teta e podemos, se o quisermos, fazer a relação arco = R * (2*teta) - assumo que teta foi calculado em radianos. De qualquer forma, os cálculos podem ser feitos todos à base de espaçamentos angulares. O meu conselho é ter os dois raios e em seguida sugerir um espaçamento angular *mínimo* entre circunferências (denotemo-lo por alfamin, o espaçamento efectivo entre as circunferências será alfa). Calculas o 2*teta, associado a uma circunferência pequena, e sabes que para N circunferências existem N espaçamentos entre elas. Então sabes que N*(2*teta + alfa) = 2*pi, obrigatoriamente (Isto é, N = 2*pi / (2*teta + alfa)). Repara que se definires à partida r, R e ainda alfa como querias fazer, N pode não vir inteiro, o que não é possível, daí eu ter dito que precisas de definir um espaçamento *mínimo* e não o espaçamento *exacto*. Queremos que, com um espaçamento mínimo de alfamin, tenhamos o máximo número de circunferências N. Para isso fazemos a divisão: Nmajorante = 2*pi / (2*teta + alfamin) - como alfamin <= alfa, Nmajorante>=N. Basta-nos agora retirar a parte inteira de Nmajorante e obtemos N (o maior N tal que alfa >= alfamin). Já temos o número de circunferências pretendido N, portanto: N*(2*teta + alfa) = 2*pi <=> alfa = (2*pi)/N - 2*teta Temos agora os parâmetros todos de que necessitamos (2*teta, alfa, r e R, N) para construir a nossa imagem. pseudo-código: for(i=0;i<N;i++) { angle=i*(2*teta + alfa); draw_circle(R*cos(angle),R*sin(angle),r); } Repara que é trivial fazer "os pequenos círculos girarem". Para isso bastaria no cálculo de angle acrescentar uma fase phi que fosse mudando ao longo do programa. Não respondo a dúvidas por mensagem.
Tharis Posted April 22, 2009 at 12:47 PM Report #258220 Posted April 22, 2009 at 12:47 PM @pedrosorio, sim, eu esqueci-me de dizer que a aproximação é razoável para tamanhos pequenos... (Fiquei a pensar de pois de pôr o post nisso e só agora tive tempo de voltar ao pc para colocar lá isso). E também me esqueci de dizer o que o pedrosorio disse, que o espaçamento devia vir em arco. Outra coisa, pedrosorio, se a configuração não for possível, sempre podes pegar no resto e dividir pelos espaçamentos (e se for dizima infinita, o olho de quem está a ver não se vai importar 😛 ).
pedrosorio Posted April 22, 2009 at 01:00 PM Report #258231 Posted April 22, 2009 at 01:00 PM Outra coisa, pedrosorio, se a configuração não for possível, sempre podes pegar no resto e dividir pelos espaçamentos (e se for dizima infinita, o olho de quem está a ver não se vai importar 😛 ). Exactamente. Quando calculo Nmajorante a partir de alfamin e coloco a parte inteira em N, usando-o agora para calcular alfa é isso que estou a fazer. Não respondo a dúvidas por mensagem.
Tharis Posted April 22, 2009 at 01:17 PM Report #258240 Posted April 22, 2009 at 01:17 PM Exactamente. Quando calculo Nmajorante a partir de alfamin e coloco a parte inteira em N, usando-o agora para calcular alfa é isso que estou a fazer. Tavas à espera que eu fosse decifrar toda essa equação em ASCII? 🙂 LOL 😛 EDIT: "à espera que eu fosse decifrar" leia-se tentar decifrar e não falhanço em decifrar. 😛
pedrosorio Posted April 22, 2009 at 01:21 PM Report #258241 Posted April 22, 2009 at 01:21 PM Tavas à espera que eu fosse decifrar toda essa equação em ASCII? 😛 LOL 🙂 Oh... Pensei que sim... Afinal esta é a secção de matemática... nem que seja ASCII hardcore 😛 EDIT: "à espera que eu fosse decifrar" leia-se tentar decifrar e não falhanço em decifrar. 😛 Sempre a defender o seu orgulho lol Não respondo a dúvidas por mensagem.
Tharis Posted April 22, 2009 at 02:27 PM Report #258271 Posted April 22, 2009 at 02:27 PM Oh... Pensei que sim... Afinal esta é a secção de matemática... nem que seja ASCII hardcore 😛 Pronto, já te fiz o favor e sim senhor, essa explicação está muito boa. 🙂 Sempre a defender o seu orgulho lol Se não o defender, quem defenderá? 😛
Cybernavigator Posted April 22, 2009 at 02:32 PM Author Report #258274 Posted April 22, 2009 at 02:32 PM Bem, excelente, obrigado pela aula gratis 😛 ainda não fiz nd pq entretanto arranjei outro metodo, muito lento. mas que deu pra ter uma ideia, e fazer um exemplo do que queria. Desde ja obrigadissimo, vou deixar aqui o codigo se conseguir faze-lo, vou ter em atençao os radianos. Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico***
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now