我试图让我的模拟停止在特定点上。我有我的起始位置、结束位置、我当前的速度以及我想要到达那里的时间。自从:
d = vt + (at^2)/2
Run Code Online (Sandbox Code Playgroud)
我在想
d = (end - start)
a = 2(d - vt) / t^2
Run Code Online (Sandbox Code Playgroud)
但当我运行它时,我的终点还很遥远。我尝试使用两个简单的更新,首先:
v += a * dt
d += v * dt
Run Code Online (Sandbox Code Playgroud)
第二:
d += v * dt + a * dt * dt / 2;
v += a * dt;
Run Code Online (Sandbox Code Playgroud)
如果这很重要的话。在这种情况下,位置是 1d,所以不需要疯狂的矢量东西。任何帮助将不胜感激:) 谢谢!
(编辑:格式化)(编辑2:更正更新#2)(编辑3:更新现在显示 dt 而不是 t)
我想知道是否有一个用于 C++(或者可能是 C)的化学和/或物理的开源科学库?
我不是在寻找模拟模型、可视化、3D 建模。
我只是在寻找一个基本的工具箱,例如:各种常数,如理想气体常数、阿伏加德罗常数、元素值周期表;分子量计算;也许是实现化学计量、气体定律、热动力学、动力学方程的基本函数。
化学/物理101种东西。
我在 SourceForge 上找到了:
我的科学项目主要包含具有物理目的的不同分析和数值计算,即我使用 Mathematica、MATLAB、Fortran。当然,使用 git 这样的版本控制程序提交进度是一个好主意。
我问一些朋友构建文件的最佳方法是什么。除了简单且众所周知的程序员文件结构(,,,,,/bin/... )之外,我没有找到令人满意但相似的答案/dat/:/doc//src/
我希望这个问题不会像物理学家提出的那样被解决;)因为我猜许多科学家在某种程度上或多或少地面临着同样的问题。由于知道程序员以前遇到过此类问题,我不会在Physics Stack Exchange上问这个问题,它可能会被标记为off-topic或too broad。
在我的上一个项目中,我具有以下全局结构,其中不同项目项之间进行了一些交互:
/External_Code_Contribution/
/Experimental_Data/
/Analytical_Calculations/
/Project_Issue_1/
/Project_Issue_5/
/Documentations/
/Thesis/
/Papers/
/Talks/
/Literature/
/Project_Organization/
/Numerical_Calculations/
/Project_Issue_1/
/SubIssue_A/
/SubIssue_B/
/SubIssue_C/
/Project_Issue_2/
/Project_Issue_3/
/Project_Issue_4/
/Project_Issue_6/
Run Code Online (Sandbox Code Playgroud)
描述: 在这个项目中,我根据文件的功能(外部贡献、实验数据、数字、文档等)对文件进行了划分,然后根据问题(在该步骤中计算的内容)对它们进行了细分,其中每个问题又包含子问题(例如,使用不同数据集进行类似计算)带有源代码、二进制文件和处理后的数据(为简单起见,全部位于同一目录中)。
不幸的是,在这种方法中,我必须:
谁遇到过在目录中构建项目的问题?请告诉我你的方法以及使你采用这种结构的论点!
(可能的补充:当我如上所述为项目设置文件结构时应该记住什么?)
如果您不完全理解答案,请随时提问,而不是举报。谢谢你!
我正在尝试使用 SDL2 用 C++ 制作一个基本的软体引擎。它的工作原理是考虑软体的所有顶点都由相同长度和刚度的弹簧互连(具有相同的弹簧常数k和长度natural_length)。为了使其更加真实,我还引入了阻尼常数c。
然而,我遇到了一个令人沮丧的问题。过去 6-7 个小时我一直在尝试调试它,但没有成功。软体遇到很多奇怪的我不明白的bug
这两个错误在此图像中都可见 - 
以下 2 个函数(它们与所有变量属于同一类,因此不需要接受任何参数)是代码的实际模拟部分。(我省略了其余的代码,因为这是不必要的。)
我使用vectorofSDL_Points来存储每个点,并使用vectorofVector来存储它们的速度。如果您想知道它Vector是什么,它只是一个structI 创建的,它只有 2 个float成员x和y。
该acceleratePoints()函数为每个点分配速度和位置,并checkCollision()很好地检查与窗口墙壁的碰撞,窗口的宽度scr_w和高度为scr_h。
void acceleratePoints()
{
vector<SDL_Point> soft_body_copy=soft_body;
vector<Vector> velocity_copy=velocity;
for(int i=0;i<soft_body.size();++i)
{
for(int j=0;j<soft_body.size();++j)
{
if(i!=j)
{
Vector d={(soft_body[j].x-soft_body[i].x)/100.0,(soft_body[j].y-soft_body[i].y)/100.0};
float t=atan2(d.y,d.x);
float disp=fabs(magnitude(d))-natural_length/100.0;
velocity_copy[i].x+=(k*disp*cos(t))/10000.0;
velocity_copy[i].y+=(k*disp*sin(t))/10000.0;
velocity_copy[i].x-=c*velocity_copy[i].x/100.0;
velocity_copy[i].y-=c*velocity_copy[i].y/100.0;
soft_body_copy[i].x+=velocity_copy[i].x;
soft_body_copy[i].y+=velocity_copy[i].y;
} …Run Code Online (Sandbox Code Playgroud) 我刚刚了解到,当从(同一物体的)另一个粒子的参考系观察时,刚体的任何粒子都只执行圆周运动,无论物体遵循什么混沌路径!所以我尝试模拟同样的情况。
我创建了 100 个紧密相连的粒子以形成一个物体,并让它们遵循任意路径,但现在我不知道如何坚持其中一个粒子的参考系并观察其他粒子。这就是我所做的(我认为没有用):
var path = [];
var particles = [];
class Particle {
constructor(x_, y_) {
this.x_ = x_;
this.y_ = y_;
this.x = 0;
this.y = 0;
this.pathIndex = 0;
this.draw = () => {
fill(360, 100, 100);
circle(this.x, this.y, 1);
}
this.update = () => {
if (this.pathIndex >= path.length) {
this.pathIndex = 0;
} else {
this.x = (path[this.pathIndex].x + this.x_);
this.y = (path[this.pathIndex].y + this.y_);
this.pathIndex++;
}
this.draw();
}
}
}
function setup() { …Run Code Online (Sandbox Code Playgroud)我有一个梯形运算符\xc3\xa2,它用它自己的伴随满足这个换向器关系:
\n\n\n\n\n[\xc3\xa2,\xc3\xa2\xe2\x81\xba] = 1
\n
在 sympy 中我写了这段代码:
\n\nimport sympy\nfrom sympy import *\nfrom sympy.physics.quantum import *\n\na = Operator(\'a\')\nad = Dagger(a)\n\nccr = Eq( Commutator(a, ad), 1 )\nRun Code Online (Sandbox Code Playgroud)\n\n现在我需要扩展和简化这样的表达式:
\n\n\n\n\n(\xc3\xa2\xe2\x81\xba + \xc3\xa2)\xe2\x81\xb4
\n
如果我只使用((ad + a)**4).expand(), sympy 不会使用换向器关系。使用规范交换子关系时如何简化表达式?
我正在尝试使用 python 求解测地线轨道方程组。它们是耦合的普通方程。我尝试了不同的方法,但它们都产生了错误的形状(绘制 r 和 phi 时,形状应该是一些周期函数)。关于如何做到这一点有什么想法吗?这是我的常量
G = 4.30091252525 * (pow(10, -3)) #Gravitational constant in (parsec*km^2)/(Ms*sec^2)
c = 0.0020053761 #speed of light , AU/sec
M = 170000 #mass of the central body, in solar masses
m = 10 #mass of the orbiting body, in solar masses
rs = 2 * G * M / pow(c, 2) #Schwarzschild radius
Lz= 0.000024 #Angular momemntum
h = Lz / m #Just the constant in equation
E= 1.715488e-007 #energy
Run Code Online (Sandbox Code Playgroud)
初始条件为:
Y(0) = rs …Run Code Online (Sandbox Code Playgroud) 我希望能够锁定车轮相对于汽车底盘的角度。在车轮之间,有弹簧,应该允许汽车暂停,但现在,角度没有锁定。我正在使用 pymunk 的函数“RotaryLimitJoint”
这样的行为就是目标 (gif)
现在它看起来像这样:
我的代码:
car_pos = Vec2d(100,500)
mass = 30
radius = 10
moment = pymunk.moment_for_circle(mass, 20, radius)
wheel1_b = pymunk.Body(mass, moment)
wheel1_s = pymunk.Circle(wheel1_b, radius)
wheel1_s.friction = 1.5
wheel1_s.color = wheel_color
space.add(wheel1_b, wheel1_s)
mass = 30
radius = 10
moment = pymunk.moment_for_circle(mass, 20, radius)
wheel2_b = pymunk.Body(mass, moment)
wheel2_s = pymunk.Circle(wheel2_b, radius)
wheel2_s.friction = 1.5
wheel2_s.color = wheel_color
space.add(wheel2_b, wheel2_s)
mass = 100
size = (80,25)
moment = pymunk.moment_for_box(mass, size)
chassi_b = pymunk.Body(mass, moment)
chassi_s = …Run Code Online (Sandbox Code Playgroud) 所以,我一直在尝试根据本教程在 pygame 中实现水物理
问题是,当我在 pygame 中实现这段代码时,水决定它不会产生很好的涟漪效应,而是会发疯并在整个屏幕上摆动,直到最终崩溃。
我环顾了一些不和谐的服务器,发现其他人试图实现同样的事情,并遇到了同样的问题。他们的代码基本上和我的一样,只是组织得更整齐,所以我会发布它而不是我的。
import pygame, random
import math as m
from pygame import *
pygame.init()
WINDOW_SIZE = (854, 480)
screen = pygame.display.set_mode(WINDOW_SIZE,0,32) # initiate the window
clock = pygame.time.Clock()
font = pygame.font.SysFont("Arial", 18)
class surface_water_particle():
def __init__(self, x,y):
self.x_pos = x
self.y_pos = y
self.target_y = y
self.velocity = 0
self.k = 0.02
self.d = 0.02
self.time = 1
def update(self):
x = -(self.target_y - self.y_pos)
a = -(self.k * x - self.d * self.velocity) …Run Code Online (Sandbox Code Playgroud) n_level = range(1, steps + 2)
Run Code Online (Sandbox Code Playgroud)
steps是用户输入,使用多索引数据框
df = {'crest': [754, 755, 762, 785], 'trough': [752, 725, 759, 765], 'L1T': [761, 761, 761, 761], 'L2T': [772, 772, 772, 772], 'L3T': [783, 783, 783, 783], 'L4T': [794, 794, 794, 794], 'L1M': [740, 740, 740, 740], 'L2M': [729, 729, 729, 729], 'L3M': [718, 718, 718, 718], 'L4T': [707, 707, 707, 707]}
for i in n_level:
if df['Crest'] >= df[f'L{i}T']:
df['Marker'] = i
elif df['Trough'] <= df[f'L{i}M']:
df['Marker'] = -i
else:
df['Marker'] …Run Code Online (Sandbox Code Playgroud) physics ×10
python ×3
pygame ×2
astronomy ×1
c++ ×1
chemistry ×1
data-science ×1
directory ×1
game-physics ×1
javascript ×1
math ×1
p5.js ×1
pandas ×1
project ×1
pymunk ×1
python-3.7 ×1
python-3.x ×1
sdl-2 ×1
softbody ×1
structure ×1
sympy ×1