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]