Autor Wątek: Czy to "prawdziwa fizyka"?? (grawitacja)  (Przeczytany 6102 razy)

Offline taki_tam

  • Użytkownik

# Luty 24, 2007, 00:38:30
Stworzylem cos takiego:
Jest to wynik mojej pracy z ksiazka od fizyki z 1 i 2 klasy gimnazjum.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Shape1: TShape;
    Label1: TLabel;
    procedure AppOnIdle(Sender: TObject; var Done: Boolean);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  //wartosci
  PY: Double;
  Przyspieszenie, Masa, Wypadkowa, Grawitacja: Double;
  Czas1, Czas2, dt: Double;

implementation

{$R *.dfm}

procedure TForm1.AppOnIdle(Sender: TObject; var Done: Boolean);
begin
  Done:= False;

  Czas1:= Time();
  dt:= Czas1 - Czas2;
  Czas2:= Time();

  Wypadkowa:= Grawitacja * Masa;
  Przyspieszenie:= (Przyspieszenie + (Wypadkowa * (dt / Masa)));

  PY:= PY + Przyspieszenie;

  Shape1.Top:= Round(PY);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  Grawitacja:= 9.81;
  Masa:= 5;

  Application.OnIdle := AppOnIdle;
end;

end.

I nie wiem czy to jest tak jak w rzeczywistosci...(zalezy mi na tym)

Uwzglednilem tylko:
- Mase obiektu
- Sile grawitacji

A jesli to jest poprawne to jak to spowolnic by nie zlamac praw fizyki....
Bo zapier...a zdrowasko :o.

Pozdrawiam ;)!

// edit by bies
Zamiast pogrubienia ([ b ]) sugeruję [ code ].
^----- dzieki za cynk... ;)

//Poprawilem [ code ]
//Kod caly bo chce by ktos oblukał czy to jest dobre czy tez lipa
//Pozdrawiam raz jeszcze! ;) :D
« Ostatnia zmiana: Luty 24, 2007, 01:13:48 wysłana przez taki_tam »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Luty 24, 2007, 00:49:48
Gdzieś po drodze zapomniałeś o prędkości. Masę możesz wywalić, bo i tak się skraca. :)

W ogólności wzorki wyglądają tak:
v' = v + a*dt
p' = p + v*dt

a - przyspieszenie (np. ziemskie) w m/s^2
v - prędkość w m/s
p - położenie w m
dt - czas w s

Ważne jest zachowanie jednostek. Upewnij się więc, czy czas na pewno dostajesz w sekundach. Także położenie będziesz musiał tuż przed wyświetleniem najprawdopodobniej przeskalować, chyba że u Ciebie 1 pixel = 1 metr. :)


A na koniec mały "ochrzan" od moderatora:
- do kodu używaj znaczników [ code ] [ /code ] (bez spacji),
- nie wklejaj całego kodu, tylko część, która dotyczy problemu

Offline taki_tam

  • Użytkownik

# Luty 24, 2007, 01:15:42
Tzn. PY to predkosc.. ;)

Pozdrawiam! ;)

Offline skalniak

  • Użytkownik
    • Home page

# Luty 24, 2007, 02:16:07
Gdzieś po drodze zapomniałeś o prędkości. Masę możesz wywalić, bo i tak się skraca. :)

W ogólności wzorki wyglądają tak:
v' = v + a*dt
p' = p + v*dt

Mala uwaga: w ogolnosci w ruchu jednostajnie zmiennym zaleznosc wartosci polozenia ciala od czasu
 p=p0+v0*t+/-(1/2)*a*t^2 (+/- - przyspieszenie badz opoznieine)

p0 -polozenie poczatkowe
v0 - predkosc poczatkowa ( u Ciebie v, staralem sie podobne oznaczenia uzyc jesli chodzi o literki przynajmniej )

Pozdr. skalniak

Offline Kamil Trzciński

  • Użytkownik

# Luty 24, 2007, 02:46:08
zastanawia mnie co to liczy...: Czas1:= Time();
  dt:= Czas1 - Czas2;
  Czas2:= Time();

imo powinno byc cos w stylu:
  Czas1:= Czas2;
 Czas2:= Time();
dt:= Czas2 - Czas1; 

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Luty 24, 2007, 03:22:46
taki_tam: Skoro PY to prędkość, a nie połozenie, to czemu używasz jej jako położenia przy wyświetlaniu obiektu? Innym błędem u Ciebie jest też brak uwzględnienia czasu przy zmianie PY.


skalniak: Chciałem zapisać to w postaci przydatnej w programowaniu gier. Tutaj mało co jest jednostajne. :)


ayufan: Prawda, że wyznaczanie tej delty jest zrobione w dziwny sposób, niemniej będzie działać to poprawnie. :)

Offline taki_tam

  • Użytkownik

# Luty 24, 2007, 12:33:27
YY.. soróweczka ale chyba kapuje to z PY...
Przynajmniej tak mi sie wydaje... (jestem laiczkiem z fizyki)
Shape1.Top:= Shape1.Top + PY;

Teraz PY to chyba predkosc...

Pozdrawiam! ;)

Offline Spider100

  • Moderator
    • Strona domowa

# Luty 24, 2007, 13:54:30
Witam!
Rozwiązanie problemu = www.spider.dathox.com -> dział artykuły
Pozdrawiam!

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Luty 24, 2007, 15:00:34
taki_tam: Prawie, tylko nadal pozostają problemy:
- nie uwzględniasz czasu (zawsze powinno być coś w stylu: x' = x + y*dt),
- będą problemy z precyzją (Shape1.Top jest chyba liczbą całkowitą, a powinieneś liczyć na liczbach rzeczywistych),
- problemy z jednostkami, chyba że 1 piksel to u Ciebie 1 metr

Offline counterClockWise

  • Użytkownik

# Luty 27, 2007, 19:15:43
Kurcze, gdyby napisać kiedyś idealny silnik fizyczny - maksymalnie wiernie modeluący zachowanie wszystkich znanych cząstek elementarnych oraz wszystkich zjawisk makroskopowych to możnaby stworzyć naprawde idealną wirtualną rzeczywistość:) I nie trzeba byłoby oddzielnie robić światła czy kolizji - bo wszystko byłoby już zrobione na poziomie fotonów i oddziaływań elektrosilnych i elektrosłabych.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Luty 27, 2007, 20:29:10
Kurcze, gdyby napisać kiedyś idealny silnik fizyczny - maksymalnie wiernie modeluący zachowanie wszystkich znanych cząstek elementarnych oraz wszystkich zjawisk makroskopowych to możnaby stworzyć naprawde idealną wirtualną rzeczywistość:) I nie trzeba byłoby oddzielnie robić światła czy kolizji - bo wszystko byłoby już zrobione na poziomie fotonów i oddziaływań elektrosilnych i elektrosłabych.
Niewykonalne z dwóch powodów:
1. Ilość danych do przechowywania była by tak duża, że komputer musiałby być większy od symulowanego świata (chyba że scięlibyśmy trochę precyzję, ale wtedy już nie byłby to idealny silnik).
2. Przeliczanie tego wszystkiego było by znacznie utrudnione - jak masz zamiar symulować foton lecący z prędkością światła, skoro prędkość ruchu elektronów w obwodach komputera też jest przez tą prędkość ograniczona?
3. Cząsteczki nie mają natury obiektów fizycznych i do poprawnej symulacji konieczne jest podejście falowe. Przykładowo, jeżeli foton ma szansę pójść kilkoma róznymi drogami (np. po przejściu przez zwierciadło półprzepuszczalne), to trzeba by symulować wszystkie te drogi jednocześnie. :)

Offline Xion

  • Redaktor
    • xion.log

# Luty 27, 2007, 20:45:21
To jest problem tego samego rzędu, co problem stopu dla maszyn Turinga - nie jest on rozwiązywalny w ramach modelu obliczeń, w ramach którego mają funkcjonować sprawdzane programy. Podobnie dokładna symulacja fizycznego świata oznacza tak naprawdę konieczność stworzenia tego świata i stwierdzanie, że były on tylko 'wirtualny' jest pozbawione sensu. Aby mówić o faktycznej symulacji, potrzebowaliśmy jakiejś 'rzeczywistości nadrzędnej', która sama nie podlegałaby ograniczeniom nakładanym na nasz symulowany świat (vide ograniczenie prędkości fotonu).

A co do owej falowości, to wg mnie jest to raczej przejaw tego, że przecież Wszechświat ma (prawdopodobnie) naturę ciągła. Symulacja go przy pomocy obecnego modelu przetwarzania wymagałaby zaś jego dyskretyzacji - jak na przykład dokładnego określenia położenia cząstki, która faktycznie jest "rozmyta".
« Ostatnia zmiana: Luty 27, 2007, 20:47:50 wysłana przez Xion »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Luty 27, 2007, 20:48:29
To jest problem tego samego rzędu, co problem stopu dla maszyn Turinga - nie jest on rozwiązywalny w ramach modelu obliczeń, w ramach którego mają funkcjonować sprawdzane programy.
Innymi słowy: nie możemy napisać Matrixa, ponieważ żyjemy w Matrixie. ;)

Offline Kurak

  • Użytkownik

# Luty 27, 2007, 20:50:00
Innymi słowy: nie możemy napisać Matrixa, ponieważ żyjemy w Matrixie. ;)
Jak: nie możemy? A ja to niby co zrobiłem? ;)

Offline tommyz

  • Użytkownik

# Luty 27, 2007, 21:24:31

Niewykonalne z dwóch powodów:

1. Ilość danych do przechowywania była by tak duża, że komputer musiałby być większy od symulowanego świata (chyba że scięlibyśmy trochę precyzję, ale wtedy już nie byłby to idealny silnik).

Niezupełnie, przecież już teraz np wybuchy nuklerane symulujemy, a to wymaga śledzenia iluśtam neutronów i innych cząstek. Trzeba trzymać wielkośc problemu w ryzach i tyle. Co do ilosci danych - z fizyki kwantowej wiadomo, że cząstki mają tylko kilka parametrów i udowodniono że nie mają ich więcej(ani nawet żadnych ukrytych parametrów których teraz nie możemy z różnych względów poznać), np elektron ma zdaje się tylko masę, ładunek i spin i jest nierozróżnialny z innymi elektronami.

2. Przeliczanie tego wszystkiego było by znacznie utrudnione - jak masz zamiar symulować foton lecący z prędkością światła, skoro prędkość ruchu elektronów w obwodach komputera też jest przez tą prędkość ograniczona?

A w czym problem? Mamy odpowiednie równania, trzeba je "tylko" rozwiązać. Rzecz jasna jesli chcesz mieć timestep zerowy to wtedy faktycznie niewyróba mówiąc delikatnie :)

3. Cząsteczki nie mają natury obiektów fizycznych i do poprawnej symulacji konieczne jest podejście falowe. Przykładowo, jeżeli foton ma szansę pójść kilkoma róznymi drogami (np. po przejściu przez zwierciadło półprzepuszczalne), to trzeba by symulować wszystkie te drogi jednocześnie. :)

Do poprawnej symulacji podejście falowe jest do bani bo tylko mechanika klasyczna "wyjaśnia" pewne zjawiska.

Bodajże z równań Maxwella wynika, że dwa polaryzatory obrócone względem siebie o kąt 'a' przepuszczają łączenie (cos a)^2 światła(czyli fotonów). Wynika z tego że dla kąta 90 stopni powinno nic nie przelatywać - a jednak przelatuje. Okazuje się że to, czy dany elektron przeleci czy nie, jest determinowane w momencie przejścia przez polaryzator a elektron nie pamięta tego co było nawet timestep wcześniej. I równania klasyczne tego nie wyjasniają, a kwantowe tak.
/Mogłem pokręcić szczegóły, ale jest to do sprawdzenia - na pewno było w którejś Delcie./