试图制作一个漂亮的三维锥形图形与一个平面相交我选择Mathematica中现有方法的轻微重新排列(即S.Mangano和S.Wagon的书籍).假设下面的代码显示所谓的Dandelin结构:内部和外部球体在锥体内部切线,也与锥体相交的平面切线.同时球体与平面的相切点是椭圆的焦点.
Block[{r1, r2, m, h1, h2, C1, C2, M, MC1, MC2, T1, T2, cone, slope, plane},
{r1, r2} = {1.4, 3.4};
m = Tan[70.*Degree];
h1 := r1*Sqrt[1 + m^2];
h2 := r2*Sqrt[1 + m^2];
C1 := {0, 0, h1};
C2 := {0, 0, h2};
M = {0, MC1 + h1};
MC2 = MC1*(r2/r1);
MC1 = (r1*(h2 - h1))/(r1 + r2);
T1 = C1 + r1*{-Sqrt[1 - r1^2/MC1^2], 0, r1/MC1};
T2 = C2 + r2*{Sqrt[1 - r2^2/MC2^2], 0, -(r2/MC2)};
cone[m_, h_] …Run Code Online (Sandbox Code Playgroud) 为了解决这个问题,我们从以下玩具模型问题开始,这里只是一个案例研究:
给定平面上的两个圆(其中心(c1和c2)和半径(r1和r2))以及正数r3,找到半径= r3的所有圆(即所有点c3是圆的中心,半径= r3 )切线(外部和内部)给定两个圆圈.
一般来说,取决于Circle[c1,r1], Circle[c2,r2] and r3有0,1,2,... 8种可能的解决方案.8种解决方案的典型案例:
我稍微修改了Jaime Rangel-Mondragon对Wolfram演示项目的整洁Mathematica实现,但它的核心是类似的:
Manipulate[{c1, a, c2, b} = pts;
{r1, r2} = Map[Norm, {a - c1, b - c2}];
w = Table[
Solve[{radius[{x, y} - c1]^2 == (r + k r1)^2,
radius[{x, y} - c2]^2 == (r + l r2)^2}
] // Quiet,
{k, -1, 1, 2}, {l, -1, 1, 2}
];
w = Select[
Cases[Flatten[{{x, y}, r} /. w, 2],
{{_Real, _Real}, _Real}
],
Last[#] > …Run Code Online (Sandbox Code Playgroud) 前段时间我在广义相对论中写了一个张量微积分包.为了使其他人可以轻松访问,应稍加修改.
有一些函数,如Christoffel用于计算Christoffel符号:
Christoffel[g_, xx_] :=
Block[{ig, res, n},
n = 4;
ig = Simplify[Inverse[g]];
res = Table[(1/2)*Sum[ig[[i,s]]*(-D[g[[j,k]], xx[[s]]] + D[g[[j,s]], xx[[k]]]
+ D[g[[s,k]], xx[[j]]]), {s, 1, n}], {i, 1, n}, {j, 1, n}, {k, 1, n}];
res
]
Run Code Online (Sandbox Code Playgroud)
其中g和xx是度量张量和分别坐标,这是我定义一个Mathematica会话以简单的方式将例如一个Ansatz方法的静态球对称时空载所述包后:
这种方式涉及缺点,因为指数范围是{1, 2, 3, 4} 相对论物理学中的常见做法,{0, 1, 2, 3}其中0代表时间坐标,{1, 2, 3}代表空间类型.
为了说明问题,让我们定义一个索引从0开始的表,即
V = Table[i - j, {i, 0, 3}, {j, 0, 3}]
{{0, -1, -2, -3}, {1, 0, -1, -2}, {2, 1, 0, -1}, {3, 2, …Run Code Online (Sandbox Code Playgroud)