Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Подскажите формулу расстояния сторон примоугольной призмы от центра (http://www.flasher.ru/forum/showthread.php?t=149798)

NumpuT 01.02.2011 01:17

Вот код
Код AS3:

for( ... ) {
                                        _materials.push( materials[i] );
                                        var curWidthY:Number = materials[i].sourceRect.height / 2;
                                        var curHeightX:Number = materials[i].sourceRect.width / 2;                                       
                                        var tmpSize:Number = int(( materials[i].sourceRect.width * materials[i].sourceRect.height ) / ( materials[i].sourceRect.width + materials[i].sourceRect.height ));
                                        var vertices:Vector.<Number>;
                                        vertices = Vector.<Number>([ -curHeightX, -curWidthY, -curHeightX, curWidthY, curHeightX, curWidthY, curHeightX, -curWidthY]);
                                        var rot:Vector3D = FACES_ORIENTATION[i].clone( );
                                        rot.negate( );
                                        var pos:Vector3D = FACES_POSITION[i].clone( );
                                        pos.scaleBy( tmpSize );
 
 
                                        var mtrx:Matrix3D = new Matrix3D( );
                                        mtrx.prependRotation( rot.x, Vector3D.X_AXIS);
                                        mtrx.prependRotation( rot.y, Vector3D.Y_AXIS);
                                        mtrx.prependRotation( rot.z, Vector3D.Z_AXIS);
                                        mtrx.appendTranslation( pos.x, pos.y, pos.z );
                                        createPolygonFace( vertices, mtrx, materials[i] );
 
                                }

Код AS3:

public function createPolygonFace( vertices:Vector.<Number>, faceMatrix:Matrix3D, material2Use:Material ):void {
 
                        var face:Face = new Face( material2Use, vertices, Vector.<int>([0, 1, 2, 0, 2, 3]), Vector.<Number>([ 0, 0, 0, 1, 1, 1, 1, 0 ]) );
 
                        var dir:Number = (vertices[2] - vertices[0]) * (vertices[5] - vertices[3]) - (vertices[3] - vertices[1]) * (vertices[4] - vertices[2]);
 
                        face.inside = dir > 0 ? !_inside : _inside;
 
                        face.transform.matrix3D = faceMatrix;
 
                        addFace( face );
 
                }

Код AS3:

private function SetFacePostion( materials:Vector.<Material> ) : Boolean {
                        if ( materials.length != 6 ) return false;
                        var w0:Number = materials[0].sourceRect.width
                        var w1:Number = materials[1].sourceRect.width
                        var w2:Number = materials[2].sourceRect.width
                        var w3:Number = materials[3].sourceRect.width
                        var w4:Number = materials[4].sourceRect.width
                        var w5:Number = materials[5].sourceRect.width
                        var h0:Number = materials[0].sourceRect.height
                        var h1:Number = materials[1].sourceRect.height
                        var h2:Number = materials[2].sourceRect.height
                        var h3:Number = materials[3].sourceRect.height
                        var h4:Number = materials[4].sourceRect.height
                        var h5:Number = materials[5].sourceRect.height
                        //if ( w0 != w2 || w1 != h2 || h0 != h1 ) return false;
// вот здесь я задаю кооэфициенты но мне нужно их точно определить я не знаю как
                        var dz:Number = 1.65; //*/ h4 / 100
                        var dy:Number = 0.6; //*/ h0 / 100;
                        var dx:Number = 1.1; //*/ w0 / 100;
                        FACES_POSITION[0].z = -dz;
                        FACES_POSITION[2].z = dz;
                        FACES_POSITION[1].x = dx;
                        FACES_POSITION[3].x = -dx;
                        FACES_POSITION[4].y = dy;
                        FACES_POSITION[5].y = -dy;
                        return true;
                }

Добавлено через 16 часов 15 минут
Я так понял что надо копать где-то в Эйлеровых графах?

NumpuT 10.02.2011 19:20

Сборище тинейджеров, которые тыкают в друг-друга пальцами и отвечают на вопросы типа сколько будет 1+1. ГЫ-ГЫ.

Psycho Tiger 10.02.2011 20:06

Цитата:

Сообщение от NumpuT (Сообщение 972415)
Сборище тинейджеров, которые тыкают в друг-друга пальцами и отвечают на вопросы типа сколько будет 1+1. ГЫ-ГЫ.

Это Вы о ком?

cleptoman 10.02.2011 20:22

обычное решение треугольников.
проецируете ваш центр на одну из сторон призмы. рисуете гипотинузу(Димарик, не бей ногами, забыл как это слово пишется)). она будет одним из катетов треугольника, который получается из нее, расстояния от точки(проекции на сторону) до центра (это будет второй катет, потому как проецировали по нормали к стороне) и вычисляем расстояние от центра до вершины. тоже гипотинуза

это если нам надо было найти это расстояние.
коэффициенты - это я не знаю что такое, но найти можно путем деления найденных размерностей на другие размерности.)

Anton Riot 10.02.2011 21:34

Цитата:

Сообщение от NumpuT (Сообщение 969422)
Я так понял что надо копать где-то в Эйлеровых графах?

Копайте в школьном учебнике по геометрии.


Часовой пояс GMT +4, время: 19:07.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.