![]() |
|
||||||||||
|
|||||
|
Banned
[03.10.2005]
Регистрация: Nov 2003
Сообщений: 425
|
Цитата:
|
|
|||||
|
[+1.3 05.04.09]
|
какраз это я сам писал ну конешно идея не моя через радиус вычислять точки а портатип мой
__________________
Бойтесь китайцев, компы приносящих! |
|
|||||
|
Регистрация: Oct 2002
Адрес: Минск,Беларусь
Сообщений: 107
|
Наглое вранье. Это код из книги "Flash MX и ActionScript: обучение на примерах". Книжка конечно не очень - но факт остается фактом. См. главу 9.
|
|
|||||
|
Banned
[03.10.2005]
Регистрация: Nov 2003
Сообщений: 425
|
:-<
|
|
|||||
|
[+1.3 05.04.09]
|
а вот ещё
var PositionCentreX = 250;
var PositionCentreY = 250;
var Radius = 150;
var Radius2 = 140;
var AmountSegments = 32;
var Thickness = 50;
var s = 200;
var pX;
var pY;
var P2 = 2*Math.PI;
var Rad = Math.PI/180;
TopsX1 = new Array();
TopsY1 = new Array();
TopsZ1 = new Array();
TopsX2 = new Array();
TopsY2 = new Array();
TopsZ2 = new Array();
for (Znak=1; Znak>-2; Znak -= 2) {
for (i=0; i<P2; i += 2*Math.PI/AmountSegments) {
TopsX1.push(0+Radius*Math.cos(i));
TopsY1.push(0-Radius*Math.sin(i));
TopsZ1.push(Znak*Thickness/2);
}
}
for (Znak=1; Znak>-2; Znak -= 2) {
for (i=0; i<P2; i += 2*Math.PI/AmountSegments) {
TopsX2.push(0+Radius2*Math.cos(i));
TopsY2.push(0-Radius2*Math.sin(i));
TopsZ2.push(Znak*Thickness/2);
}
}
_root.onEnterFrame = function() {
pX = -(PositionCentreX-_ymouse)*0.005;
pY = (PositionCentreY-_xmouse)*0.005;
_root.clear();
for (i=0; i<=AmountSegments*2; i++) {
cosX = Math.cos(pX*Rad);
sinX = Math.sin(pX*Rad);
cosY = Math.cos(pY*Rad);
sinY = Math.sin(pY*Rad);
PowY = TopsY1[i]*cosX-TopsZ1[i]*sinX;
PowX = TopsX1[i]*cosY+(TopsY1[i]*sinX+TopsZ1[i]*cosX)*sinY;
PowZ = -TopsX1[i]*sinY+(TopsY1[i]*sinX+TopsZ1[i]*cosX)*cosY;
TopsX1[i] = PowX;
TopsY1[i] = PowY;
TopsZ1[i] = PowZ;
PowY = TopsY2[i]*cosX-TopsZ2[i]*sinX;
PowX = TopsX2[i]*cosY+(TopsY2[i]*sinX+TopsZ2[i]*cosX)*sinY;
PowZ = -TopsX2[i]*sinY+(TopsY2[i]*sinX+TopsZ2[i]*cosX)*cosY;
TopsX2[i] = PowX;
TopsY2[i] = PowY;
TopsZ2[i] = PowZ;
}
this.lineStyle(0, 0xffffff, 100);
this.moveTo(PositionCentreX+TopsX1[0]*(s/(s+TopsZ1[0])), PositionCentreY+TopsY1[0]*(s/(s+TopsZ1[0])));
for (i=1; i<AmountSegments; i++) {
this.lineTo(PositionCentreX+TopsX1[i]*(s/(s+TopsZ1[i])), PositionCentreY+TopsY1[i]*(s/(s+TopsZ1[i])));
}
this.lineTo(PositionCentreX+TopsX1[0]*(s/(s+TopsZ1[0])), PositionCentreY+TopsY1[0]*(s/(s+TopsZ1[0])));
this.moveTo(PositionCentreX+TopsX1[AmountSegments]*(s/(s+TopsZ1[AmountSegments])), PositionCentreY+TopsY1[AmountSegments]*(s/(s+TopsZ1[AmountSegments])));
for (i=1; i<AmountSegments; i++) {
this.lineTo(PositionCentreX+TopsX1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])), PositionCentreY+TopsY1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])));
}
this.lineTo(PositionCentreX+TopsX1[AmountSegments]*(s/(s+TopsZ1[AmountSegments])), PositionCentreY+TopsY1[AmountSegments]*(s/(s+TopsZ1[AmountSegments])));
for (i=0; i<AmountSegments; i++) {
this.moveTo(PositionCentreX+TopsX1[i]*(s/(s+TopsZ1[i])), PositionCentreY+TopsY1[i]*(s/(s+TopsZ1[i])));
this.lineTo(PositionCentreX+TopsX1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])), PositionCentreY+TopsY1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])));
}
this.moveTo(PositionCentreX+TopsX2[0]*(s/(s+TopsZ2[0])), PositionCentreY+TopsY2[0]*(s/(s+TopsZ2[0])));
for (i=1; i<AmountSegments; i++) {
this.lineTo(PositionCentreX+TopsX2[i]*(s/(s+TopsZ2[i])), PositionCentreY+TopsY2[i]*(s/(s+TopsZ2[i])));
}
this.lineTo(PositionCentreX+TopsX2[0]*(s/(s+TopsZ2[0])), PositionCentreY+TopsY2[0]*(s/(s+TopsZ2[0])));
this.moveTo(PositionCentreX+TopsX2[AmountSegments]*(s/(s+TopsZ2[AmountSegments])), PositionCentreY+TopsY2[AmountSegments]*(s/(s+TopsZ2[AmountSegments])));
for (i=1; i<AmountSegments; i++) {
this.lineTo(PositionCentreX+TopsX2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])), PositionCentreY+TopsY2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])));
}
this.lineTo(PositionCentreX+TopsX2[AmountSegments]*(s/(s+TopsZ2[AmountSegments])), PositionCentreY+TopsY2[AmountSegments]*(s/(s+TopsZ2[AmountSegments])));
for (i=0; i<AmountSegments; i++) {
this.moveTo(PositionCentreX+TopsX2[i]*(s/(s+TopsZ2[i])), PositionCentreY+TopsY2[i]*(s/(s+TopsZ2[i])));
this.lineTo(PositionCentreX+TopsX2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])), PositionCentreY+TopsY2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])));
}
for (i=0; i<AmountSegments; i++) {
this.moveTo(PositionCentreX+TopsX1[i]*(s/(s+TopsZ1[i])), PositionCentreY+TopsY1[i]*(s/(s+TopsZ1[i])));
this.lineTo(PositionCentreX+TopsX2[i]*(s/(s+TopsZ2[i])), PositionCentreY+TopsY2[i]*(s/(s+TopsZ2[i])));
this.moveTo(PositionCentreX+TopsX1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])), PositionCentreY+TopsY1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])));
this.lineTo(PositionCentreX+TopsX2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])), PositionCentreY+TopsY2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])));
}
};
__________________
Бойтесь китайцев, компы приносящих! |
|
|||||
|
Banned
[03.10.2005]
Регистрация: Nov 2003
Сообщений: 425
|
А вот моя функция рисования окружности. Намного проще и лучше всего предложенного.
MovieClip.prototype.circle = function(x, y, r) { // Функция: circle // // Описание: Рисует окружность. // 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); } }; |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
приятно видеть, что стлько народу учило в школе тригонометрию :))
это все охренеть как круто, но практического применения окружностей рисованных из 16 дуговых сегментов - ноль. слишком сложно. соотношение стоимости овчинки и её выделки явно не в пользу овчинки :) |
|
|||||
|
Banned
[03.10.2005]
Регистрация: Nov 2003
Сообщений: 425
|
А что мешает задать 12 - 10 - 8 - 6 ????
Просто 16 - для супер точности. |
|
|||||
|
Banned
[03.10.2005]
Регистрация: Nov 2003
Сообщений: 425
|
Да и ещё. Тебе этот адресок не знаком?
http://www.astronomy.swin.edu.au/~pbourke Так вот. Я его сейчас закачиваю. Уже 8000 файлов закачалось. Телепортом. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
дадада, поль бурк монстер :)
я когда-то во флэше сделал рисование кривой бабочки, у него нашел формулу... на форуме есть где-то :) а насчет окружности - проще нарисовать руками, приаттачить и отскейлить. удобно, доступно, недорого. незачем извращаться кодом там где это незачем :) по-моему так... |
![]() |
Часовой пояс GMT +4, время: 18:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|