3D 플롯에 골판지 리본 플로팅
Oct 17 2020
다음 코드를 작성하도록 지정되었습니다.
Clear[P, t];
P[t_] = {-t, t, (1/2) t (8 - t)};
arch =
ParametricPlot3D[P[t], {t, 0, 8},
Axes -> Automatic, AxesLabel -> {"x", "y", "z"}, PlotRange -> All,
Boxed -> False, ViewPoint -> CMView, BoxRatios -> Automatic]
코드의 출력은 다음과 같습니다.
그런 다음 다음 코드를 사용하여 단위 접선 벡터, 단위 법선 및 종법 벡터를 얻는 작업을 맡았습니다.
Clear[P, x, y, z, t, unittan, mainunitnormal, binormal];
P[t_] = {-t, t, (1/2) t (8 - t)};
curve = ParametricPlot3D[Evaluate[P[t]], {t, 0, 8}];
unittan[t_] = P'[t]/Sqrt[P'[t] . P'[t]];
unittanvectors = Table[Vector[unittan[t], Tail -> P[t]], {t, 0, 8, 0.5}];
mainunitnormal[t_] = N[unittan'[t]/Sqrt[Expand[unittan'[t] . unittan'[t]]]];
mainnormalvectors =
Table[
Vector[mainunitnormal[t], Tail -> P[t], VectorColor -> Red],
{t, 0, 8, 0.5}];
binormal[t_] = N[Cross[unittan[t], mainunitnormal[t]]];
binormalvectors =
Table[Vector[binormal[t], Tail -> P[t], VectorColor -> Red], {t, 0, 8, 0.5}];
everything =
Show[curve, unittanvectors, mainnormalvectors, binormalvectors,
ViewPoint -> CMView, PlotRange -> All, BoxRatios -> Automatic,
AxesLabel -> {"x", "y", "z"}]
벡터로 다음 플롯을 생성합니다.
이제 중심 곡선이 위에 표시된 곡선과 일치하는 2 단위 너비의 리본을 플로팅하라는 요청을 받았습니다. 가능하면 리본을 주름지게하십시오. 제공된 힌트는 binormal[t].
내가 만든 플롯 중 하나는 다음 코드를 사용했습니다.
ParametricPlot3D[P[t] + s mainunitnormal[t] + Cos[3 s] binormal[t],
{t, 0, 8}, {s, -Pi, Pi},
PlotPoints -> {15, 15}, ViewPoint -> CMView, BoxRatios -> Automatic,
AxesLabel -> {"x", "y", "z"}]
내 플롯이 할당 된 작업 요구 사항과 일치합니까? 또한 리본의 너비가 두 단위 밖에되지 않도록하려면 어떻게해야합니까?
답변
5 cvgmt Oct 17 2020 at 08:49
을 사용하여 계산을 단순화 할 수 FrenetSerretSystem있으며 파라 메트릭 솔리드 영역을 구성합니다.
$$ P(t)+ (0,s,\cos3s).(T(t),N(t),B(t))+(0,0,h).(T(t),N(t),B(t))$$
여기 $$0 \leq t \leq 8, -\pi\leq s \leq \pi, -1\leq h\leq 1$$
P[t] + ({0, s, Cos[3 s]} + {0, 0, h}).{unittanvectors[t], mainunitnormal[t], binormal[t]}
그런 다음 영역의 경계를 독립적으로 그립니다.
Clear["`*"];
P[t_] = {-t, t, (1/2) t (8 - t)};
curve = ParametricPlot3D[Evaluate[P[t]], {t, 0, 8},
PlotStyle -> {Thick, Red}];
{unittanvectors[t_], mainunitnormal[t_], binormal[t_]} =
Last@FrenetSerretSystem[P[t], t];
solid = P[t] + ({0, s, Cos[3 s]} + {0, 0, h}).{unittanvectors[t],
mainunitnormal[t], binormal[t]};
SetOptions[ParametricPlot3D, Mesh -> None, PlotPoints -> 30,
Boxed -> False, Axes -> False, ViewPoint -> {-2.37, -0.52, -2.35}];
i = ParametricPlot3D[solid /. {h -> 1}, {t, 0, 8}, {s, -Pi, Pi},
PlotStyle -> Cyan];
j = ParametricPlot3D[solid /. {h -> -1}, {t, 0, 8}, {s, -Pi, Pi},
PlotStyle -> Purple];
u = ParametricPlot3D[solid /. {t -> 0}, {s, -Pi, Pi}, {h, -1, 1},
PlotStyle -> Yellow];
v = ParametricPlot3D[solid /. {t -> 8}, {s, -Pi, Pi}, {h, -1, 1},
PlotStyle -> Yellow];
p = ParametricPlot3D[solid /. {s -> -Pi}, {t, 0, 8}, {h, -1, 1},
PlotStyle -> Blue];
q = ParametricPlot3D[solid /. {s -> Pi}, {t, 0, 8}, {h, -1, 1},
PlotStyle -> Blue];
Show[i, j, u, v, p, q]