Manipulate[
Needs["VectorAnalysis`"];

(* Styles definitions *)
titleStyle = {FontFamily ->"Liberation Sans",14,Bold, RGBColor[0.35,0.35,0.35],Background->RGBColor[1,1,1,0]};
tagAtRight = {FontFamily ->"Liberation Sans",12,Bold, RGBColor[0,33/255,66/255],Background->RGBColor[1,1,1,0],TextAlignment->{Right,Top}};
textStyle = {FontFamily ->"Liberation Sans",10,Bold, RGBColor[0.35,0.35,0.35],Background->RGBColor[1,1,1,0],AutoIndent->False,ParagraphIndent->0,TextJustification->1};
explanationStyle = {FontFamily ->"Times",14,Plain, RGBColor[0.35,0.35,0.35],Background->RGBColor[1,1,1,0],AutoIndent->False,ParagraphIndent->0,TextJustification->1};
mathStyle = {FontFamily ->"Liberation Serif",14,Bold, RGBColor[0.35,0.35,0.35],Background->RGBColor[1,1,1,0],AutoIndent->False,ParagraphIndent->0,TextJustification->1};
plotLabelStyle = {FontFamily ->"Times",14,Plain, RGBColor[0.35,0.35,0.35],Background->RGBColor[1,1,1,0]};

TabView[{

(*** Tab1 **)
Style["Koordinatentransformation und Gebietsintegral",titleStyle] ->
Column[{

(* Explanation Button Row *)
Row[{Button[Style["Erklärung",9],
CreateDocument[
TextCell[
Pane[
Column[{
TextCell["\nZiel:",{explanationStyle,Bold,16}]
,TextCell["Das erste Tab dieser Visualisierung stellt dar, wie eine Koordinatentransformation die Berechnung des Integrals über einem - \"durch kompliziertere Kurven\" begrenzten - Gebiet vereinfachen kann. Im dargestellten Spezialfall, dass der Integrand die konstante Funktion f(x,y) := 1 ist, handelt es sich dann insbesondere um eine Methode, den Flächeninhalt eines durch solche Kurven berandeten Gebiets zu berechnen.\n",explanationStyle]
, TextCell["Aktivität:",{explanationStyle,Bold,16}]
,TextCell["Mit den vier Reglern können Sie das Gebiet R definieren. Beachten Sie simultan, wie sich das transformierte Gebiet S verändert. Dieses ist ein Rechteck, also kann das transformierte Integral und damit in unserem Fall der Flächeninhalt mittels eines Zweifach-Integrals berechnet werden.\nVorsicht: Diese Transformation ist jedoch nicht flächenerhaltend und deshalb lässt sich der Flächeninhalt nicht direkt \"aus dem Rechteck ablesen\". Dies sieht man auch daran, dass im Zweifach-Integral der Wert der Jacobi-Determinante als \"Korrektur-Integrand\" auftritt.\n",explanationStyle]
, TextCell["Tipp:",{explanationStyle,Bold,16}]
,TextCell["In einer weiteren Visualisierung erfahren Sie mehr darüber, welche Rolle die Jacobi-Determinante in der Formel der Koordinatentransformation für das Gebietsintegral hat, bzw. wieso sie hier auftaucht.",explanationStyle]
},{Left,Top}]

]],WindowFrame->"Normal",WindowSize->{650,500},WindowTitle->"Erklärung"],ImageSize->{90,20},Background->RGBColor[0.9,0.9,0.9]], "  "
}],

(* Manipulate Row *)
Manipulate[
Column[{

Show[
ParametricPlot[
{r Cos[theta],r Sin[theta]}
,{r,r1,r2},{theta,theta1,theta2},Mesh->None,AspectRatio->11/22,Axes->True,Frame->False,AxesLabel->{"x","y"},AxesOrigin->{-11,0},PlotRange->{{-11,11},{0,11}},ImageSize->{400,200}
],
Graphics[{RGBColor[0,0,1,1],Dotted,Circle[{0,0},r1+0.25(r2-r1),{0,theta1}]}],
Graphics[Text["(Subscript[θ, 1])",{r1+0.25(r2-r1),theta1}]],
Graphics[{RGBColor[1,0.5,0,1],Dotted,Circle[{0,0},r1+0.75(r2-r1),{0,theta2}]}],
Graphics[Text["(Subscript[θ, 2])",{r1+0.75(r2-r1),theta2}]],
Graphics[{RGBColor[0.5,0.5,0.5,1],Dotted,Line[{{0,0},{r1 Cos[theta1 + 0.25 (theta2 - theta1)],r1 Sin[theta1 + 0.25 (theta2 - theta1)]}}]}],
Graphics[Text["(Subscript[r, 1])",{(r1-0.6) Cos[theta1 + 0.25 (theta2 - theta1)],(r1-0.6) Sin[theta1 + 0.25 (theta2 - theta1)]}]],
Graphics[{RGBColor[0.5,0.5,0.5,1],Dotted,Line[{{0,0},{r2 Cos[theta1 + 0.75 (theta2 - theta1)],r2 Sin[theta1 + 0.75 (theta2 - theta1)]}}]}],
Graphics[Text["(Subscript[r, 2])",{(r2-0.6) Cos[theta1 + 0.75 (theta2 - theta1)],(r2-0.6) Sin[theta1 + 0.75 (theta2 - theta1)]}]],
Graphics[{RGBColor[0.2,0.2,0.2,1],Text["R",{(r1+0.5(r2-r1)) Cos[theta1 + 0.5 (theta2 - theta1)],(r1+0.5(r2-r1)) Sin[theta1 + 0.5 (theta2 - theta1)]}]}]
]

, Column[{
TextCell["Der Flächeninhalt des Gebiets lässt sich berechnen als Gebietsintegral der konstanten Funktion f(x,y) := 1 über diesem Gebiet:",textStyle,Plain,CellFrameMargins->{{6,6},{0,0}},CellFrame->True,CellFrameColor->White]
,Style["A = (Underscript[∫∫, R])f(x,y)dxdy = (Underscript[∫∫, R])1dxdy",Plain]
,TextCell["In obigen kartesischen Koordinaten ist dies aber schwierig. Nicht so nach untenstehender Koordinaten-Transformation in Polarkoordinaten (rot markiert ist die Jacobi-Determinante):",textStyle,Plain,CellFrameMargins->{{6,6},{0,0}},CellFrame->True,CellFrameColor->White]
,Style["A = (Underscript[∫∫, S])f((T^(-1))(x,y))|({{((∂x)/(∂r)), ((∂x)/(∂θ))}, {((∂y)/(∂r)), ((∂y)/(∂θ))}})|drdθ  = (∫_(Subscript[θ, 1])^(Subscript[θ, 2]))(∫_(Subscript[r, 1])^(Subscript[r, 2]))rdrdθ = "<>ToString[Round[Integrate[r,{r,r1,r2},{theta,theta1,theta2}],0.1]],Plain]
,TextCell["\nGeometrisch ist das transformierte Gebiet dieser (nicht flächenerhaltenden!) Transformation ein Rechteck bzgl. der transformierten Koordinaten:",textStyle,Plain,CellFrameMargins->{{6,6},{0,0}},CellFrame->True,CellFrameColor->White]
},Center]
, "  "

,Show[
ParametricPlot[
(*{r,theta}*)
{Sqrt[(r Cos[theta])^2+(r Sin[theta])^2],ArcCos[(r Cos[theta])/Sqrt[(r Cos[theta])^2+(r Sin[theta])^2]]}
,{r,r1,r2},{theta,theta1,theta2},Mesh->None,AspectRatio->Pi/11,Axes->True,Frame->None,AxesLabel->{r,"θ"},PlotRange->(*Automatic*){{0,11},{0,Pi}},ImageSize->{400,200}
],
Graphics[{RGBColor[0,0,1,1],Dotted,Line[{{0,theta1},{r1,theta1}}]}],
Graphics[Text["(Subscript[θ, 1])",{0.4,theta1+0.25}]],
Graphics[{RGBColor[1,0.5,0,1],Dotted,Line[{{0,theta2},{r1,theta2}}]}],
Graphics[Text["(Subscript[θ, 2])",{0.4,theta2+0.25}]],
Graphics[{RGBColor[0.5,0.5,0.5,1],Dotted,Line[{{r1,0},{r1,theta1}}]}],
Graphics[Text["(Subscript[r, 1])",{(r1-0.4), 0.25}]],
Graphics[{RGBColor[0.5,0.5,0.5,1],Dotted,Line[{{r2,0},{r2,theta1 }}]}],
Graphics[Text["(Subscript[r, 2])",{(r2-0.4) ,0.25}]],
Graphics[{RGBColor[0.2,0.2,0.2,1],Text["S",{(r1+0.5(r2-r1)),theta1 + 0.5 (theta2 - theta1)}]}]

]
},Center,Background->RGBColor[1,1,1]]
,""
,{{r1 ,1,Dynamic[Style["(Subscript[r, 1]) = "<>ToString[Round[r1,0.1]],textStyle]]},0.001,4,0.1}
,{{r2,8,Dynamic[Style["(Subscript[r, 2]) = "<>ToString[Round[r2,0.1]],textStyle]]},4.1,10,0.1}
,{{theta1,Pi/8,Dynamic[Style["(Subscript[θ, 1]) = "<>ToString[TraditionalForm[Round[theta1,0.1]]],textStyle]]},0,1,0.1}
,{{theta2,1.4,Dynamic[Style["(Subscript[θ, 2]) = "<>ToString[TraditionalForm[Round[theta2,0.1]]],textStyle]]},1.1,Pi}
, TextCell["\n"]
,Delimiter
,TextCell["(Theorie)\n",tagAtRight]
,TextCell[Style["Koordinaten-Transformation T \nkartesische ↔ polare Koordinaten:\n",textStyle]]
, TextCell[Style["    (x,y) = T(r,θ) := (r cos(θ), r sin(θ))",mathStyle]]
, TextCell[Style["    (r,θ) = "<>"(T^1)"<>"(x,y) := "<>"("<>"(Sqrt[(x^2) + (y^2)])"<>",arccos("<>"(x/(Sqrt[(x^2) + (y^2)]))"<>"))",mathStyle]]
,TextCell[Style["\nJacobi-Determinante dieser Koordinaten-Transformation:",textStyle]]
,TextCell[Style["                           |({{((∂x)/(∂r)), ((∂x)/(∂θ))}, {((∂y)/(∂r)), ((∂y)/(∂θ))}})|  =  r"
,mathStyle,16],TextAlignment->Center
]
, Delimiter
,Text[""]
,ControlPlacement->Left,SaveDefinitions->True,AppearanceElements->None,Paneled->False,SynchronousUpdating->False
]
},{{Right,Center},{Top,Top}}],
(*** end Tab1 ***)

(*** Tab2 ***)
Style["Zur Rolle der Jacobi-Determinante",titleStyle] ->
Column[{

(* Explanation Button Row *)
Row[{Button[Style["Erklärung",9],
CreateDocument[
TextCell[
Pane[
Column[{

TextCell["\nDie Jacobi-Determinante in der Flächenapproximation für ein Integrationsgebiet:\n",{explanationStyle,Bold}]
TextCell["Wie Sie in der Vorlesung gesehen haben, wird die Gebietsfläche ΔA des Gebietes R approximiert durch die Fläche des Parallelogramms, welches durch die beiden Vektoren",explanationStyle]
,TextCell[Style["\n      Δv (Subscript[r, u]) und Δv (Subscript[r, v])\n"],mathStyle,Plain]
,TextCell["aufgespannt wird. Diese Fläche entspricht bekanntlich dem Betrag des Kreuzprodukts dieser beiden Vektoren, was wiederum als Determinante geschrieben werden kann. Also:",explanationStyle]
, TextCell[Style["\n     ΔA ≈ det[Δu (Subscript[r, u]) × Δv (Subscript[r, v]) ] = det[((Subscript[r, u]) × (Subscript[r, v]))ΔuΔv] = det[((Subscript[r, u]) × (Subscript[r, v]))]ΔuΔv\n",mathStyle,Plain]]
,TextCell["Da r die (Orts-)Vektorfunktion des Bildes eines Punktes (u,v) in den (x,y)-Koordinaten ist, lautet das Kreuzprodukt in der Determinante ausgeschrieben:",explanationStyle]
, TextCell[Style["\n     det[(ru × rv)] = |({{((∂x)/(∂r)), ((∂x)/(∂θ))}, {((∂y)/(∂r)), ((∂y)/(∂θ))}})|  und damit  ΔA ≈ |({{((∂x)/(∂r)), ((∂x)/(∂θ))}, {((∂y)/(∂r)), ((∂y)/(∂θ))}})|ΔuΔv\n",mathStyle,Plain]]
, TextCell["Diese Determinante ist uns also als die Jacobi-Determinante der Vektorfunktion r von früher her bekannt.\n",explanationStyle]
, TextCell["Wie kommt nun die Jacobi-Determinante in die Formel zur allgemeinen Koordinatentransformation in Integralen?\n",{explanationStyle,Bold}]
, TextCell["Dies sehen wir, wenn wir uns erinnern, dass das Gebietsintegral ja als Riemannsumme approximiert wird und der Grenzwert dieses Integral definiert. Genau dort tritt das \"Flächenstück\" ΔA und damit die Jacobi-Determinante auf:",explanationStyle]
, TextCell[Style["\n     (Underscript[∫∫, R])f(x,y)dA := (lim_(m, n → ∞)) (∑_(i = 1)^m) (∑_(j = 1)^n) f((Subscript[x, i]),(Subscript[y, j]))ΔA \n
                      ≈ (lim_(m, n → ∞)) (∑_(i = 1)^m) (∑_(j = 1)^n) f(x((Subscript[u, i]),(Subscript[v, j])),y((Subscript[u, i]),(Subscript[v, j])))|({{((∂x)/(∂r)), ((∂x)/(∂θ))}, {((∂y)/(∂r)), ((∂y)/(∂θ))}})|ΔuΔv \n
                      =: (Underscript[∫∫, S])f(x(u,v),y(u,v))|({{((∂x)/(∂r)), ((∂x)/(∂θ))}, {((∂y)/(∂r)), ((∂y)/(∂θ))}})| dudv\n
                        ",mathStyle,Plain]]
, TextCell["Die Approximation \"≈\" wird nun gerade exakt, wenn die Bedingungen des Satzes über die Koordinatentransformation erfüllt sind (siehe Vorlesung und Begleitliteratur) und es ergibt sich dessen Aussage (Formel).",explanationStyle]

,TextCell[" "]

},{Left,Top}]

]],WindowFrame->"Normal",WindowSize->{650,500},WindowTitle->"Erklärung"],ImageSize->{90,20},Background->RGBColor[0.9,0.9,0.9]], "  "
}],

" ",
Manipulate[

(*Definitions*)
p1={1,5};
p2={2,1};
p3={5,3};
p4={3,6};

(*the following defines the curves (pieces) c1,...,c4:*)
xParamPieces={{t+1,t≥0&&t<1},{3 t-1,t≥1&&t<2},{-2 t+9,t≥2&&t<3},{-2 t+9,t≥3&&t≤4}};
yParamPieces={{(-b-4) t^2+b t+5,t≥0&&t<1},{((2/3)-(b/3)) t^2+b t+(1/3)-(2/3) b,t≥1&&t<2},{((3/5)-(b/5)) t^2+b t+(3/5)-(6/5) b,t≥2&&t<3},{((-1/7)-(b/7)) t^2+b t+(51/7)-(12/7) b,t≥3&&t≤4}};

(*The (normed) tangent vectors in point p1 along curve c4 and along curve c1:*)tangentVectorP1C4={(D[(-1) xParamPieces[[4]][[1]],t]/.{t->4}),(D[(-1) yParamPieces[[4]][[1]],t]/.{t->4})};
normedTangentVectorP1C4=tangentVectorP1C4/Norm[{(D[(-1) xParamPieces[[4]][[1]],t]/.{t->4}),(D[(-1) yParamPieces[[4]][[1]],t]/.{t->4})}];
tangentVectorP1C1={(D[xParamPieces[[1]][[1]],t]/.{t->0}),(D[yParamPieces[[1]][[1]],t]/.{t->0})};
normedTangentVectorP1C1=tangentVectorP1C1/Norm[{(D[(1) xParamPieces[[1]][[1]],t]/.{t->0}),(D[(1) yParamPieces[[1]][[1]],t]/.{t->0})}];
polygonP1=p1;
polygonP2=p1+Norm[p2-p1] normedTangentVectorP1C1;
polygonP3=polygonP2+Norm[p4-p1] normedTangentVectorP1C4;
polygonP4=p1+Norm[p4-p1] normedTangentVectorP1C4;

(*Show/GUI*)
Column[{
" ",
Show[
{
ParametricPlot[
{Piecewise[xParamPieces],Piecewise[yParamPieces]}
,{t,0,4},AxesOrigin->{0,0},PlotRange->{{0,10},{0,10}}
]
,Graphics[Arrow[{polygonP1,polygonP4}]]
,Graphics[Arrow[{polygonP1,polygonP2}]]
,Graphics[{RGBColor[0.5,0.5,0.5,0.5],Polygon[{polygonP1,polygonP2,polygonP3,polygonP4}]}]
, Graphics[Text["ΔA",polygonP1+0.5*(polygonP2-polygonP1 +polygonP4-polygonP1)]]
, Graphics[Text[Style["R",RGBColor[0,33/255,66/255],Plain],{2.5,4.4}]]
, Graphics[Text[Style["Δu (Subscript[r, u])",RGBColor[0,33/255,66/255],Plain],1.05polygonP4]]
, Graphics[Text[Style["Δv (Subscript[r, v])",RGBColor[0,33/255,66/255],Plain],0.92polygonP2]]
}
,ImageSize->{400,300}]
," "
,Dynamic[
Style["ΔA = "<>ToString[Evaluate[Round[Norm[CrossProduct[{(polygonP4-polygonP1)[[1]],(polygonP4-polygonP1)[[2]],0},{(polygonP2-polygonP1)[[1]],(polygonP2-polygonP1)[[2]],0}]],0.1]]]
,plotLabelStyle]
],
Dynamic[
Style[
"Δv (Subscript[r, v]) = "<>
"("<>ToString[
TraditionalForm[Round[(polygonP4-polygonP1)[[1]],0.1]]]<>" , "<>ToString[
TraditionalForm[Round[(polygonP4-polygonP1)[[2]],0.1]]]<>
")^T"<>
"\n Δu (Subscript[r, u]) = "<>
"("<>ToString[
TraditionalForm[Round[(polygonP2-polygonP1)[[1]],0.1]]]<>" , "<>ToString[
TraditionalForm[Round[(polygonP2-polygonP1)[[2]],0.1]]]<>
")^T"<>
"\n"
,plotLabelStyle
]
]
},
Background->RGBColor[1,1,1],Alignment->Center]

(*Manipulate options:*)
,{{b,-3,Dynamic[Style["Verzerrungsparameter b = "<>ToString[Round[b,0.1]],textStyle]]},-20,20}
, TextCell["Mit dem Verzerrungsparameter können Sie die Form des Gebietes R (blau umrandet) verändern.",textStyle,Plain]
,TextCell[ "(Seine genaue Bedeutung hier ist rein technisch und sollte Sie nicht weiter kümmern.)\n",textStyle,Plain]
, Delimiter
,TextCell["Es gilt:",textStyle]
, TextCell[Style["     ΔA ≈ det[Δu (Subscript[r, u]) × Δv (Subscript[r, v]) ] = det[((Subscript[r, u]) × (Subscript[r, v]))ΔuΔv] = det[((Subscript[r, u]) × (Subscript[r, v]))]ΔuΔv\n",mathStyle,Plain]]
,TextCell["Da r die (Orts-)Vektorfunktion des Bildes eines Punktes (u,v) in den (x,y)-Koordinaten ist, lautet das Kreuzprodukt in der Determinante ausgeschrieben:",textStyle]
, TextCell[Style["     det[(ru × rv)] = |({{((∂x)/(∂r)), ((∂x)/(∂θ))}, {((∂y)/(∂r)), ((∂y)/(∂θ))}})|  und damit  ΔA ≈ |({{((∂x)/(∂r)), ((∂x)/(∂θ))}, {((∂y)/(∂r)), ((∂y)/(∂θ))}})|ΔuΔv",mathStyle,Plain]]
, TextCell["Unter den in der Vorlesung genannten Bedingungen führt dies zur Formel über den Variablenwechsel (über die Koordinatentransformation) in Gebietsintegralen (Details s.a. Erklärung): ",textStyle]
, TextCell[Style["\n     (Underscript[∫∫, R])f(x,y)dA  =  (Underscript[∫∫, S])f(x(u,v),y(u,v))|({{((∂x)/(∂r)), ((∂x)/(∂θ))}, {((∂y)/(∂r)), ((∂y)/(∂θ))}})| dudv
                        ",mathStyle,Plain]]

, Delimiter
, TextCell["\nBeachten Sie insbeondere auch, dass bei Verzerrungen bestimmten Typs - d.h. bei spezieller Gestalt des Gebiets - die Approximation durch das Parallelogramm schlecht werden kann!",textStyle,RGBColor[77/255,0,0],Plain]
,TextCell[" "]
,ControlPlacement->Left,SaveDefinitions->True,AppearanceElements->None,Paneled->False,SynchronousUpdating->False]

},{{Right,Right},{Top,Top}}]
(*** end Tab2 ***)


},Background->RGBColor[0.85,0.85,0.85],ImageSize->Full]
,SaveDefinitions->True,AppearanceElements->None,Paneled->False,SynchronousUpdating->False]

2009, Projekt LEMUREN, Lernen Multimedial, Departement Mathematik, ETH Zürich | Licence: CC-BY-SA