|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+1 22.04.13]
[+1 06.03.13] Регистрация: Apr 2012
Сообщений: 239
|
через матрицу элементарно находится: создаем матрицу, поворачиваем её на нужный угол и в цикле смещаем на tx = width / divideBy и ty = height / divideBy и трансформируем исходную точку
|
|
|||||
Banned
[+1 30.08.14]
[+1 26.02.14] Регистрация: Apr 2012
Сообщений: 162
|
Если я правильно понял точку вращения(левый верхний угол), то x1(начальная)=R, a x2=x1*cos(поворота).
|
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
через прямоугольные треугольники и через синус/косинус, один из углов которого будет угол на который повернут прямоугольник
|
|
|||||
Banned
[+1 30.08.14]
[+1 26.02.14] Регистрация: Apr 2012
Сообщений: 162
|
Все эти точки вращаются по окружности со своим начальным радиусом и поворачиваются на один и тот-же угол.Что тут сложного?
У всех точек радиус окружности: sqr(spawn(x(точки)-x(центра вращения),2)+spawn(у(точки)-у(центра вращения),2)) Дальше х2=r*cos(a) y2=r*sin(a). Последний раз редактировалось Koopa; 11.10.2012 в 21:08. |
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
|
Koopa, "spawn", как я понимаю, это возведение в степень?
import flash.display.Sprite; function createRect(x:Number,y:Number,width:Number,height:Number,rotation:Number):Sprite { var rect:Sprite = new Sprite(); rect.graphics.lineStyle(1,0xFFFFFF *Math.random()); rect.graphics.beginFill(0xFFFFFF * Math.random(), 0.5); rect.graphics.drawRect(0,0,width, height); rect.graphics.endFill(); rect.rotation = rotation; rect.x = x; rect.y = y; return rect; } var devideBy:int = 3; var origX:Number = 250; var origY:Number = 50; var origWidth:Number = 360; var origHeight:Number = 240; var origRotation:Number = 46; var origRadRotation:Number = origRotation * Math.PI / 180; var origRect:Sprite = createRect(origX,origY,origWidth,origHeight,origRotation); addChild(origRect); var subWidth:Number = origWidth / devideBy; var subHeight:Number = origHeight / devideBy; var rad:Number; var localSubX:Number; var localSubY:Number; var subX:Number; var subY:Number; for (var k:int = 0; k < devideBy; k++) { for (var j:int = 0; j < devideBy; j++) { localSubX = k * subWidth; localSubY = j * subHeight; rad = Math.sqrt((localSubX * localSubX) + (localSubY * localSubY)); subX = origX + Math.cos(origRadRotation) * rad; subY = origY + Math.sin(origRadRotation) * rad; addChild(createRect(subX,subY,subWidth,subHeight,origRotation)); } } Это решение первое, что пришло мне в голову и с таким вариантом я всячески уже пробовал, но так и не решил. Решил с помощью матриц, как мне подсказал gagaga.
__________________
hauts.ru |
|
|||||
Banned
[+1 30.08.14]
[+1 26.02.14] Регистрация: Apr 2012
Сообщений: 162
|
rotationZ кто запретил?
и нет, origX и origY да и '+' да и формула не правильна. p.s. извините увлёкся,spawn это pow |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
package { import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; import flash.geom.Rectangle; /** * ... * @author wolsh */ public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point var rectangle:Rectangle = new Rectangle(250, 50, 420, 330); tiling(rectangle, 30, 6, 8); } private function tiling(rect:Rectangle, rectRotation:Number, columns:uint, rows:uint):void { var tileW:Number = rect.width / columns; var tileH:Number = rect.height / rows; var angle:Number = rectRotation * Math.PI / 180; for (var i:uint = 0; i < rows; i++) { for (var j:uint = 0; j < columns; j++) { var tile:Shape = createTile(tileW, tileH); this.addChild(tile); var point1:Point = Point.polar(tileW * j, angle); var point2:Point = Point.polar(tileH * i, angle); tile.x = rect.x + point1.x - point2.y; tile.y = rect.y + point1.y + point2.x; tile.rotation = rectRotation; } } } private function createTile(width:Number, height:Number):Shape { var tile:Shape = new Shape(); tile.graphics.lineStyle(1, 0x660000); tile.graphics.beginFill(0xFF0000); tile.graphics.drawRect(0, 0, width, height); return tile; } } }
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 15:08. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|