Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Вопрос по переобразованием Лоренца ? (3 стр)

Вопрос по переобразованием Лоренца ? (3 стр)

Поделиться
Страницы: 1 2 3 4 Следующая »
werasaimonПостоялецwww5 дек. 201722:18#30
se-sss
> Ну круто!
> На 100-ом километре шоссе едет автомобиль со >скоростью 100 км/ч.
> В сумме будет 200.
Ты чёто  куда-то вообще не туда розмышляешь
v это мгновеная скорость обекта  .
Например автомобиль стоит ( x = 'x ) .
Автомобиль эдит с скоростю 100км/ч ( x + v * t ).
Где v * t == 100км/ч . А  t == это время , то бишь
t += dt в каждой итерации
Ты чё то запутался в розмышлениях ...!
x == позиция обекта ...!
se-sssПостоялецwww5 дек. 201722:47#31
Пешил поправить на совсем исправленную версию.
Разбирайся:
#include <stdio.h>
#include <math.h>

/// вектор пространства минковского 
struct vector2
{
    float x; /// координата перемещения 
    float t; /// координата время 
    
    /// инцелизация вектора 
    vector2():x(0),t(0){}
    vector2( float _x , float _t ):x(_x),t(_t){}
    
    /// метрика минковского 
    float length2() const
    {
         return fabs(t*t - x*x);
    }
    
};
 
 


int main(int argc, char *argv[])
{
  
  
      /// скорость 
      float v  = 0.1; 
    
     float gamma = sqrt( 1.0 - (v*v));/// лоренц фактор ^-1
  
      /// ИСО котрые в нулевой момент время совпадают 
     vector2 K0(1,0);  //  ИСО 0
     vector2 K1(1/gamma, v*1/gamma);  //  ИСО 1
     
     /// одна итерация для переобразования координат 
    
     K1.x = (K0.x + v * K0.t)/ gamma;/// перебразования лоренца по оси x
     K1.t = (K0.t + v * K0.x )/ gamma ;/// переобразования  лоренца по оси t
   
      
     /// вывод информации на екран 
     printf( "|K0|:%f |K1|:%f \n",K0.length2(),(K1).length2());
     printf( " \n\n\n what a fack ? " );
    
    
    return 0;
}

Вывод:

|K0|:1.000000 |K1|:1.000000

Правка: 6 дек. 2017 3:21

werasaimonПостоялецwww5 дек. 201723:07#32
И вот объясните почему  , мы делемь  на лоренц фактор , а не множемь . Видь совершено очевидно что при большых скоростях пространство должно сжыматтся а не растягиваться, то бишь должно быть так x * sqrt( 1.0 - (v*v)/(c*c)) ,
А не так x / sqrt( 1.0 - (v*v)/(c*c)) .
x == радиус_вектор == просто позиция точки ..
Или что чемь бестрей двигаеться обект тем больше он вытягивается в направлении движения . Так ещё и это |K| == |'K| как видно с моих рассуждений выше , видь совершено понятно что переобразования верны , а условие не выполняется .
P.S: подумайте над этим? Только реально подумайте, а не угадивайте ...!

Правка: 5 дек. 2017 23:08

se-sssПостоялецwww5 дек. 201723:16#33
В нашей системе движущийся предмет сжат, а когда переходим в систему координат, связанную с движущимся телом, он "разжимается".
werasaimonПостоялецwww6 дек. 20171:12#34
se-sss

>В нашей системе движущийся предмет сжат, а >когда переходим в систему координат, связанную с >движущимся телом, он "разжимается".

Нет...!
в нашей неподвижной ИСО ('K),
Обект (K)  сжат в зависимости от относительной скорость их  движения ('K.v-K.v) ..! , а если мы перейдьом в  ИСО ( K ) движующуюся с какойто скоростью ( K.v > 0 ) , мы должны сказать что мы стоимь на месте , а всё остальное движется .
И в ИСО  (K) , объект ('K)
Сожмёться отнсительно относительной скорости их движения (K.v-'K.v) .

Другими словами в ИСО (K) сожметтся ('K).
А в ИСО ('K) сожметтся (K).

А относительная скорость движения у них ровна , если не учитивать -+..!

P.S: ведь законы физики должны быть инварятные,одинаковы во всех ИСО...!

Если они будут двигаться с одинаковой скоростю или стоять на месте ,то их относительная скорость будет ровна нулю,
И не чего не сожметтся..!
Другими словами они  будут иметь одинаковый интервал .


P.S: а за код спасибо .Проверил всё правильно ...!

Правка: 6 дек. 2017 2:25

=A=L=X=Постоялецwww6 дек. 20175:50#35
werasaimon
> а за код спасибо .Проверил всё правильно ...!

Как могло такое произойти, ты ведь мамой клялся что в твоём коде нет никакой ошибки! =8()

werasaimonПостоялецwww6 дек. 20177:00#36
=A=L=X=
да я тупанул,,,!  , а ведь ошибка была банальна , и свое оправдания скажу что все провтикали , кроме  se-sss .
И да мне стыдно ,,,,!

se-sss
снимаю шляпу перед вами сер... !


хорошо если с одной вещественной осю (x) разобрались ,
то вот с произвольно на правленой скоростью  , есть не точности ,
они очень большые  чтоб списать их на ошибки интегрирования ,,?
я так понимаю когда скорость произвольно направлена  , то нам надо использовать метод  Герглоцема ,,? , так пишет в википедии ,!
или нет ,,,?

метод  Герглоцема , будет если мы раскомментируем  правую часть уравнения ,!

const float c = 300;

struct vector3
{
    float x;
    float y;
    float z;

    vector3() : x(0) , y(0) , z(0) {}
    vector3(float _x , float _y , float _z ): x(_x), y(_y) , z(_z) {}

    //-----------------------------//
    
    float length2() const
    {
        return x*x + y*y + z*z;
    }

    float length() const
    {
        return sqrt(length2());
    }

    //-----------------------------//

    float dot( const vector3& v )
    {
        return x*v.x + y+v.y + z*v.z;
    }

    //-----------------------------//

    vector3 operator * ( const float& v ) const
    {
        return vector3( x * v , y * v , z * v );
    }

    vector3 operator / ( const float& v ) const
    {
        return vector3( x / v , y / v , z / v );
    }
};


struct vector4
{
    float t;
    float x;
    float y;
    float z;

    vector4() : x(0) , y(0), z(0) , t(0) {}
    vector4(float _x , float _y , float _z , float _t): x(_x),y(_y),z(_z),t(_t) {}

    //-----------------------------//
    
    float length2() const
    {
        return fabs( (x*x+y*y+z*z) - (t*t)*(c*c) );
    }

    float length() const
    {
        return sqrt(length2());
    }
    
    //-----------------------------//

    vector3 getV()
    {
        return vector3(x,y,z);
    }
};



int main(int argc, char *argv[])
{


    /// ISO
    vector4 K0(1,3,1,2);
    vector4 K1=K0;

    /// velocity
    vector3 v(2.0,0.0,100.0);

    /// gamma factor
    float gamma = sqrt(1.0 - (v.dot(v))/(c*c));


    /// method Gerglocema
    K1.x = ((K0.x + v.x * K0.t ) / gamma);// + (1.0/(v.dot(v))) * ((1.0/gamma) - 1.0);
    K1.x = ((K0.x + v.y * K0.t ) / gamma);// + (1.0/(v.dot(v))) * ((1.0/gamma) - 1.0);
    K1.y = ((K0.t + v.z * K0.t ) / gamma);// + (1.0/(v.dot(v))) * ((1.0/gamma) - 1.0);
    K1.t = (K0.t + (v.dot(K0.getV())) / (c*c) ) / gamma;


    printf( "|K0| : %f   |K1| : %f" , K0.length() , K1.length() );


    return 0;
}

P.S: помогите мне дураку разобраться ,,,?

Правка: 6 дек. 2017 7:04

=A=L=X=Постоялецwww6 дек. 20177:48#37
werasaimon
> и свое оправдания скажу что все провтикали

Как я мог "провтикать", если я тебе много раз и до последнего говорил что в твоём коде содержится ошибка, да не одна??

se-sssПостоялецwww6 дек. 201719:46#38
Вот тут формула Герглоца.
То, что в коде, непохоже абсолютно на правильную формулу. (Хотя да, это первое, что хочется написать, пытаясь обобщить формулу на произвольную скорость. Однако и это написано со множеством ошибок.).
Правильная формула на порядок сложнее. Плюс там ещё особенность при малых скоростях.

Правка: 6 дек. 2017 19:47

werasaimonПостоялецwww6 дек. 201722:36#39
=A=L=X=
Ну да да , я пеньок ! Поетому и надеюсь на вашу помощь !

se-sss
>Вот тут формула Герглоца.
>То, что в коде, непохоже абсолютно на >правильную формулу. (Хотя да, это первое, что >хочется написать, пытаясь обобщить формулу на >произвольную скорость. Однако и это написано >со множеством ошибок.).
>Правильная формула на порядок сложнее. Плюс >там ещё особенность при малых скоростях

А что именно , я делаю не так в вычислениях , объясни, покажы , научи ? 
И что за особиность при малых скоростях ?

P.S: а вы можете с первого раза произнести фамилию этого чувака Герглоца )))) ?

Правка: 6 дек. 2017 23:24

se-sssПостоялецwww6 дек. 201723:59#40
Честно говоря, даже не слышал про такого. Так что теперь узнал и в этом смысле какую-то пользу получил.
Давай так, напиши эту формулу или вставь картинкой, чтобы быть уверенным, что мы об одном и том же говорим.
А дальше пробуй реализацию.
}:+()___ [Smile]Постоялецwww7 дек. 201713:19#41
se-sss
> Плюс там ещё особенность при малых скоростях.
Нет там особенностей, просто формула неудачно записана. Надо так:
[cht]\frac 1{v^2}\left(\frac{1-\sqrt{1-v^2}}{\sqrt{1-v^2}}\right)=\frac{\gamma^2}{\gamma+1}.[/cht]
se-sssПостоялецwww8 дек. 20170:48#42
Точно! И проще  к тому же.
werasaimonПостоялецwww8 дек. 20173:06#43
]}:+()___ [Smile]
> > Плюс там ещё особенность при малых скоростях.
> Нет там особенностей, просто формула неудачно записана. Надо так:
Gercolcem_factor | Вопрос по переобразованием Лоренца ?
так это , тоже самое что ,и, в маем  коде , только по другому написано !

//-----------------------------------------------------------//

короче , что я не делал с методом Герголцема , работать эта штука не хочет ! И по вашему тоже пробовал .
Вот картинка с преобразованиями Герголцема , которые я использую в коде .
помогите разобраться ?
Gercolcem_Transformation | Вопрос по переобразованием Лоренца ?

//-----------------------------------------------------------//

поскольку метод Герголцема работать не хочет .
Поэтому я взял с своего движка , матрицу буста лоренца , и , она вроде как работает  ,
но есть погрешность , могу ли я списать эту погрешность на ошибки интегрирования  .
помогите разобраться ?

вот картинка с матрицей буста Лоренца , только тут сигнатура (+,+,+,+)
Loretz_Boost | Вопрос по переобразованием Лоренца ?

P.S: мне просто не очень нравиться сигнатура (-,+,+,+)

вот код:

+ Показать

P.S: помогите мне пожалуйста . могу ли я списать малую погрешность на ошибки интегрирования ?

Правка: 9 дек. 2017 2:15

daveПостоялецwww8 дек. 201713:39#44
Предлагаю автору проверить то, что преобразования Лоренца являются группой.
А именно:

Lv = Lv2*Lv1, где v = v1 + v2.


>переобразованием

Гд.ру - переобразование для всех!

Правка: 8 дек. 2017 13:45

Страницы: 1 2 3 4 Следующая »

/ Форум / Программирование игр / Физика

2001—2017 © GameDev.ru — Разработка игр