Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2016, 08:22   #11
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию

Т.е. вы пытались уравнение движения через полиномы Эрмита вывести?
gusluk вне форума Ответить с цитированием
Старый 25.04.2016, 09:38   #12
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

А как вы делали экстраполяцию через Эрмита? Ведь это метод для интерполяции и для его работу надо указать правую и левую границу. А правая нам неизвестна.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 25.04.2016, 13:38   #13
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Я давно это делал. Частности уже забыл. Помню, делал в разных системах - с центром в центре одного из тел ( обычно Солнца, или Земли ) или с центром в центре масс системы.
Вот, по этому документу - *.rar
Там , кстати очепятки нашел. Зеленым исправил, на рисунке.
Само вычисление по Эрмиту - на стр. 7, через промежуточные значения.

PS Точкой там производные обозначены. Например a с точкой - прозводная ускорения - рывок ( это только у Эрмита используется ).
r,r',a,a' - векторы конечно.
Изображения
Тип файла: jpg ispr.jpg (82.9 Кб, 67 просмотров)
Вложения
Тип файла: rar reasint.rar (108.6 Кб, 6 просмотров)

Последний раз редактировалось type_Oleg; 25.04.2016 в 13:48.
type_Oleg вне форума Ответить с цитированием
Старый 18.05.2016, 08:00   #14
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию

Время от времени в программе вылазит ошибка доступа к памяти. Полагаю что неправильно работаю с потоками. Реализовано так:
Код:
Procedure ThreadEx_0(); stdcall;
var i,j,k:integer;
begin
k:=round(N/4);
for i:=1 to k do
    begin
      if (Atom[i].Mass>0) then
      begin
           for j:=1 to N do
             begin
             if (i<>j)and(Atom[j].Mass>0) then interactAtom(i,j);
             end;
      end;
    end;
end;
Procedure ThreadEx_1(); stdcall;
var i,j,k:integer;
begin
k:=round(N/4);
for i:=k+1 to 2*k do
    begin
      if (Atom[i].Mass>0) then
      begin
           for j:=1 to N do
             begin
             if (i<>j)and(Atom[j].Mass>0) then interactAtom(i,j);
             end;
      end;
    end;
end;
Procedure ThreadEx_2(); stdcall;
var i,j,k:integer;
begin
k:=round(N/4);
for i:=2*k+1 to 3*k do
    begin
      if (Atom[i].Mass>0) then
      begin
           for j:=1 to N do
             begin
             if (i<>j)and(Atom[j].Mass>0) then interactAtom(i,j);
             end;
      end;
    end;
end;
Procedure ThreadEx_3(); stdcall;
var i,j,k:integer;
begin
k:=round(N/4);
for i:=3*k+1 to 4*k do
    begin
      if (Atom[i].Mass>0) then
      begin
           for j:=1 to N do
             begin
             if (i<>j)and(Atom[j].Mass>0) then interactAtom(i,j);
             end;
      end;
    end;
end;

Procedure Step;
var  i,j:integer;  tid: cardinal; R:real;
begin
for i:=1 to N-1 do
      begin
      Atom[i].X:=Atom[i].X+Atom[i].u;
      Atom[i].Y:=Atom[i].Y+Atom[i].v;
      Atom[i].Z:=Atom[i].Z+Atom[i].w;
      end;
BMOut;

h[0] := CreateThread(nil, 0, @ThreadEx_0,nil, 0, tid);
h[1] := CreateThread(nil, 0, @ThreadEx_1,nil, 0, tid);
h[2] := CreateThread(nil, 0, @ThreadEx_2,nil, 0, tid);
h[3] := CreateThread(nil, 0, @ThreadEx_3,nil, 0, tid);
WaitForMultipleObjects(4, @h, true, INFINITE);
for i := 0 to 3 do CloseHandle(h[i]);

end;
Сам понимаю что криво, потому прошу пнуть в сторону правильного решения.
interactAtom приведен в первом сообщении.

Последний раз редактировалось gusluk; 18.05.2016 в 08:03.
gusluk вне форума Ответить с цитированием
Старый 18.05.2016, 08:26   #15
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Код:
        for j:=1 to N do // Тут ошибка при J=N выход за приделы массива.
             begin
             if (i<>j)and(Atom[j].Mass>0) then interactAtom(i,j);
Почему не используете TThead?
Тут правильнее использовать ParallelFor в любой его реализации.
Какая версия Delphi? Для старых есть библиотека Omni
В новых смотри:
http://docwiki.embarcadero.com/RADSt...amming_Library
http://docwiki.embarcadero.com/RADSt...amming_Library
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 18.05.2016, 09:04   #16
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию

Так как постоянно в разездах, а программирование для меня просто способ отвлечься от работы, пользуюсь portable версией Borland® Delphi® Version 10.0
TThead не стал использовать потому что решил для моей простой задачи достаточно и такого варианта. А чем он хуже использования TThead я не знаю.
Буду копать Parallel.For
gusluk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эффект разбрасывания частиц от курсора (С++, DirectX) _Fobos_ Общие вопросы C/C++ 1 15.03.2016 07:36
сделать программу на C++, которая переводит цветовую модель RGB в модель HSV Kabahol Помощь студентам 5 14.03.2014 19:05
Простая система частиц SaiLight Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 04.04.2013 19:14
Проблема с прозрачностью частиц(DirectX). zipwind Gamedev - cоздание игр: Unity, OpenGL, DirectX 11 21.06.2011 21:54
Восстановление Треков частиц(фитирование) winny Общие вопросы C/C++ 0 01.10.2008 13:55