Форум 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 31.01.2011 20:30

Подскажите формулу расстояния сторон прямоугольной призмы от центра
 
Например прямоугольная призма с оcнованием w = 300 h = 200 и высотой 400 имеет примерно такие коэфициенты dz = 1.65 dy = 0.6 dx = 1.1.
Как это вычислить?

Anton Riot 31.01.2011 21:05

что за коэффициенты?

NumpuT 31.01.2011 21:10

Цитата:

Сообщение от Anton Riot (Сообщение 969353)
что за коэффициенты?

Расстояния от центра для всех осей. У Cилина определен как FACE_POSITION!

dimarik 31.01.2011 23:15

С учетом страны. На всякий случай. Прямоугольный. Во избежание подобного.

NumpuT 31.01.2011 23:33

Цитата:

Сообщение от dimarik (Сообщение 969383)
С учетом страны. На всякий случай. Прямоугольный. Во избежание подобного.

Я не заметил опечатку, я понимаю что есть такие люди которых это напрягает, но суть вопроса не раскрыта, еще одно дополнение если рассматривать куб то все коэффициенты равны 1це.

dimarik 01.02.2011 00:06

Вместо "простите, это опечатка" Вы обвиняете меня в напряжении. Ай яй яй! Как некультурно. А я ведь заслуженный граммар-наци.

bav 01.02.2011 00:11

NumpuT, давайте уточним (терминология взята отсюда):
1) Под "прямоугольной" призмой вы подразумеваете прямую призму?
2) "Подскажите формулу расстояния сторон прямоугольной призмы от центра". От центра призмы?
3) "Коэффициенты - расстояния от центра для всех осей". Что вы имеете в виду под осью?

i.o. 01.02.2011 00:21

с рисуночком было бы понятнее, что тревожит автора...

Anton Riot 01.02.2011 00:25

w = 300 h = 200 и высотой 400

расстояние от _геометрического_ центра такого ящика до сторон будет, соответственно, 150, 100 и 200.

Добавлено через 1 минуту
коэффициент не может быть расстоянием. размерность не та. Так что вы не объяснили, что вам надо.

NumpuT 01.02.2011 01:12

Вложений: 2
Да пока самую простую прямоугольную, с прямыми углами почти куб. Хотя многогранник под углом тоже интересно!
Оси в центре призмы. Я выложит 2 рисунка с почти точными коэффициентами и не очень.

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, время: 06:01.

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