<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel rdf:about="https://community.wolfram.com">
    <title>Community RSS Feed</title>
    <link>https://community.wolfram.com</link>
    <description>RSS Feed for Wolfram Community showing ideas tagged with Astronomy sorted by most viewed.</description>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/498246" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/790989" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1207400" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/852052" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1306910" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2017849" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/462064" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1732567" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/463610" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3398690" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/465606" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/471232" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/934452" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/803953" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/578543" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1732166" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/882068" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3438819" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2222977" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1731612" />
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/498246">
    <title>Dzhanibekov effect or tennis racket theorem</title>
    <link>https://community.wolfram.com/groups/-/m/t/498246</link>
    <description>![Animation showing movement of a rigid body according to Dzhanibekov effect or tennis racket theorem][1]&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: /c/portal/getImageAttachment?filename=fg546ukuhjfgvg5.gif&amp;amp;userId=11733&#xD;
  [2]: https://www.wolframcloud.com/obj/61fabce7-3d2f-4042-8e61-9fe54c4c353e</description>
    <dc:creator>Mariusz Iwaniuk</dc:creator>
    <dc:date>2015-05-18T11:39:33Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/790989">
    <title>Gravity wave visualization: celebrating LIGO first direct detection of gravitational waves</title>
    <link>https://community.wolfram.com/groups/-/m/t/790989</link>
    <description>![enter image description here][1]&#xD;
&#xD;
With all of the rumors and excitement about the gravity wave press release tomorrow, I was reminded of this code I&amp;#039;ve had lying around for years for creating a gravity wave visualization (seen above) for illustrative purposes. You can find also a [video here][2]. It was inspired by an interaction I had years ago (unfortunately I can&amp;#039;t find the interaction in my email) with someone on the [LISA][3] project wanting to use Mathematica to re-create a visualization they had. This code was the result of that interaction. &#xD;
&#xD;
First, the primary goal was to generate a &amp;#034;space-time&amp;#034; surface and mesh that had a double-armed spiral wave on it. The following code generates that. Its dependent on a rotation angle Theta which is not specified here:&#xD;
&#xD;
    Plot3D[(60 Cos[&#xD;
       2 ArcTan[y/(x + 0.00001)] - \[Theta] + 0.544331 Sqrt[x^2 + y^2]])/(&#xD;
     20 + Sqrt[x^2 + y^2]), {x, -45, 45}, {y, -45, 45}, PlotPoints -&amp;gt; 100,&#xD;
      Mesh -&amp;gt; 20, MeshStyle -&amp;gt; {RGBColor[.5, .5, .5, .5]}, Boxed -&amp;gt; False,&#xD;
      BoxRatios -&amp;gt; Automatic, Axes -&amp;gt; False, &#xD;
     PlotStyle -&amp;gt; {RGBColor[.3, .3, .8]}, ImageSize -&amp;gt; {1024, 768}, &#xD;
     Lighting -&amp;gt; {{&amp;#034;Directional&amp;#034;, White, ImageScaled[{0, 0, 2.}]}}, &#xD;
     ViewPoint -&amp;gt; {-0.011, -3.043, 1.479}, Background -&amp;gt; Black, &#xD;
     BoundaryStyle -&amp;gt; RGBColor[.5, .5, .5, .5]]&#xD;
&#xD;
I wanted to overlay 2 stars or black holes on top of the surface. Combining the above with  this overlay and giving a value to the angle Theta we get:&#xD;
&#xD;
    With[{\[Theta] = 0}, &#xD;
     Show[Plot3D[(&#xD;
       60 Cos[2 ArcTan[y/(x + 0.00001)] - \[Theta] + &#xD;
          0.544331 Sqrt[x^2 + y^2]])/(&#xD;
       20 + Sqrt[x^2 + y^2]), {x, -45, 45}, {y, -45, 45}, &#xD;
       PlotPoints -&amp;gt; 100, Mesh -&amp;gt; 20, &#xD;
       MeshStyle -&amp;gt; {RGBColor[.5, .5, .5, .5]}, Boxed -&amp;gt; False, &#xD;
       BoxRatios -&amp;gt; Automatic, Axes -&amp;gt; False, &#xD;
       PlotStyle -&amp;gt; {RGBColor[.3, .3, .8]}, ImageSize -&amp;gt; {1024, 768}, &#xD;
       Lighting -&amp;gt; {{&amp;#034;Directional&amp;#034;, White, ImageScaled[{0, 0, 2.}]}}, &#xD;
       ViewPoint -&amp;gt; {-0.011, -3.043, 1.479}, Background -&amp;gt; Black, &#xD;
       BoundaryStyle -&amp;gt; RGBColor[.5, .5, .5, .5]], &#xD;
      Graphics3D[{Directive[Hue[.58, 0, 1], &#xD;
         Lighting -&amp;gt; &#xD;
          Join[{{&amp;#034;Ambient&amp;#034;, Black}}, &#xD;
           Table[{&amp;#034;Directional&amp;#034;, Hue[.58, .5, 1], &#xD;
             ImageScaled[{Sin[x], Cos[x], -.5}]}, {x, 0, 2 Pi - 2 Pi/8, &#xD;
             2 Pi/8}]]], &#xD;
        Sphere[{2 Cos[\[Theta] - \[Pi]/2], 2 Sin[\[Theta] - \[Pi]/2], 3}, &#xD;
         1], Sphere[{Cos[\[Theta] + \[Pi]/2], Sin[\[Theta] + \[Pi]/2], 3},&#xD;
          1]}], PlotRange -&amp;gt; All]]&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
Next, I wanted to animate this to give the effect that the spiral arms are rotating outwards. That&amp;#039;s done by incrementing the angle Theta and generating a list of frames that can then be exported.&#xD;
&#xD;
    anim = Table[&#xD;
      Rasterize[&#xD;
       Show[Plot3D[(&#xD;
         60 Cos[2 ArcTan[y/(x + 0.00001)] - \[Theta] + &#xD;
            0.544331 Sqrt[x^2 + y^2]])/(&#xD;
         20 + Sqrt[x^2 + y^2]), {x, -45, 45}, {y, -45, 45}, &#xD;
         PlotPoints -&amp;gt; 100, Mesh -&amp;gt; 20, &#xD;
         MeshStyle -&amp;gt; {RGBColor[.5, .5, .5, .5]}, Boxed -&amp;gt; False, &#xD;
         BoxRatios -&amp;gt; Automatic, Axes -&amp;gt; False, &#xD;
         PlotStyle -&amp;gt; {RGBColor[.3, .3, .8]}, ImageSize -&amp;gt; {800, 450}, &#xD;
         Lighting -&amp;gt; {{White, ImageScaled[{0, 0, 2.}]}}, &#xD;
         ViewPoint -&amp;gt; {-0.011, -3.043, 1.479}, &#xD;
         Background -&amp;gt; RGBColor[0, 0, 0], BoundaryStyle -&amp;gt; Gray], &#xD;
        Graphics3D[{Directive[Hue[.58, 0, 1], &#xD;
           Lighting -&amp;gt; &#xD;
            Join[{{&amp;#034;Ambient&amp;#034;, Black}}, &#xD;
             Table[{&amp;#034;Directional&amp;#034;, Hue[.58, .5, 1], &#xD;
               ImageScaled[{Sin[x], Cos[x], -.5}]}, {x, 0, 2 Pi - 2 Pi/8, &#xD;
               2 Pi/8}]]], &#xD;
          Sphere[{2 Cos[\[Theta] - \[Pi]/2], 2 Sin[\[Theta] - \[Pi]/2], &#xD;
            3}, 1], Sphere[{Cos[\[Theta] + \[Pi]/2], &#xD;
            Sin[\[Theta] + \[Pi]/2], 3}, 1]}], &#xD;
        PlotRange -&amp;gt; All]], {\[Theta], 0, 2 \[Pi], .1}];&#xD;
&#xD;
And then to export it to an animated GIF: &#xD;
&#xD;
    Export[&amp;#034;GravityWave.gif&amp;#034;, anim]&#xD;
&#xD;
The result is the animation at the top of this post.&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ezgif.com-optimize%283%29.gif&amp;amp;userId=20103&#xD;
  [2]: https://www.youtube.com/watch?v=WiNKulqt0SE&#xD;
  [3]: http://lisa.nasa.gov/&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=gravitywave60.png&amp;amp;userId=25355&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=GravityWave.gif&amp;amp;userId=25355</description>
    <dc:creator>Jeffrey Bryant</dc:creator>
    <dc:date>2016-02-10T19:35:05Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1207400">
    <title>Finding yoga-poses constellations in the night sky</title>
    <link>https://community.wolfram.com/groups/-/m/t/1207400</link>
    <description>![found constellations][9]&#xD;
&#xD;
## Story Time ##&#xD;
&#xD;
At its first meeting in 1922, the International Astronomical Union (IAU), officially adopted the list of 88 constellations that we use today.&#xD;
These include 14 men and women, 9 birds, two insects, 19 land animals, 10 water creatures, two centaurs, one head of hair, a serpent, a dragon, a flying horse, a river and 29 inanimate objects. As many of us have (frustratingly) witnessed first hand while star-gazing - most of these bear little resemblance to their supposed figures. Instead, it is more likely that the ancient constellation-makers meant them to be symbolic, a kind of celestial &amp;#034;Hall of Fame&amp;#034; for their favorite animals or heroes.&#xD;
&#xD;
This begs two questions I sought to answer with this project:&#xD;
&#xD;
 1. Can we &amp;#039;do better&amp;#039; now with the WL&amp;#039;s StarData[] curated data and Machine Learning functionality?&#xD;
 2. What if the ancient constellation-makers were slightly more creative? Say they looked up at the sky, and only saw yoga-poses!&#xD;
&#xD;
Some examples of the found yoga-pose constellations, projected on images of the night sky are shown here, with a walk-through of the code below:&#xD;
&#xD;
[![example yoga-pose constellations][1]][2]&#xD;
&#xD;
## Yoga Poses ##&#xD;
&#xD;
First things first, finding images for yoga poses.&#xD;
Turns out, the WL has a built in YogaPose Entity Class with 216(!) available entities and their schematics.&#xD;
A lot of these are very similar (e.g. palms facing up/down) and we therefore only select a subset of them, which differ substantially from each other:&#xD;
&#xD;
    yogaposes = EntityClass[&amp;#034;YogaPose&amp;#034;, All] // EntityList;&#xD;
    chosenPoses = &#xD;
      List /@ {4, 6, 7, 8, 11, 14, 23, 25, 28, 35, 38, 43, 51, 54, 56, 59,&#xD;
         63, 65, 71, 72, 76, 77, 78, 84, 88, 90, 98, 100, 102, 103, 110, &#xD;
        111, 112, 113, 116, 118, 119, 125, 126, 133, 139, 142, 149, 152, &#xD;
        153, 154, 155, 156, 160, 164, 165, 167, 172, 177, 178, 180, 182, &#xD;
        183, 184, 190, 193, 194, 195, 197, 202, 204, 206, 207, 209, 210, &#xD;
        212, 215, 216};&#xD;
    Shallow[Extract[yogaposes, chosenPoses]]&#xD;
&#xD;
We write a wrapper to ensure the schematics are padded to give a square image and visualize our 73 constellations:&#xD;
&#xD;
    makeSquare[gr_, size_, bool_: False] := &#xD;
     Block[{range, magnitudes, order, padding, newRanges, res},&#xD;
      range = AbsoluteOptions[gr, PlotRange][[1, 2]];&#xD;
      magnitudes = Abs[Subtract @@@ range];&#xD;
      order = Ordering[magnitudes, 2, Greater];&#xD;
      padding = Subtract @@ magnitudes[[order]]/2;&#xD;
      newRanges = {{-1, 1} padding + Last[range[[order]]], &#xD;
        First[range[[order]]]};&#xD;
      res = Show[gr, PlotRange -&amp;gt; Reverse@newRanges[[order]], &#xD;
        ImageSize -&amp;gt; size];&#xD;
      If[bool, Rasterize[res], res]]&#xD;
&#xD;
    Multicolumn[&#xD;
     makeSquare[#[&amp;#034;SimplifiedSchematic&amp;#034;], 64] &amp;amp; /@ &#xD;
      Most[Extract[yogaposes, chosenPoses]], 9, Frame -&amp;gt; All]&#xD;
&#xD;
![constellations graphic][3]&#xD;
&#xD;
## Neural Network ##&#xD;
Our problem now can be worded as a classification one: *given 5-10 stars, classify them as one of the 73 yoga-poses constellations*&#xD;
The problem with that formulation of-course is that 5-10 randomly selected points inside the constellation region isn&amp;#039;t specific enough to differentiate between constellations. The image below shows that although 1000 sets of 10 points will define the shape, 10 points alone fall short:&#xD;
&#xD;
![pointsInMesh][4] &#xD;
&#xD;
Instead, we compute the Voronoi diagram of the points, using DistanceTransform to leverage already-optimized convolutional neural nets used for classifying images. Note that, even if (naturally) the results are less clear with fewer points (left to right) - the result with only 10 points at the far right is still quite recognizable to a human eye:&#xD;
&#xD;
![distanceTransforms][5] &#xD;
&#xD;
With this in-mind, we create a neural network similar to the [VGG16][6] neural network, with successive 5x5 convolutions, ReLu activation functions and Max pooling layers. Finally note that we use an average pooling instead of fully connected layers to reduce the number of parameters and the use of dropout layers.&#xD;
&#xD;
    conv[output_] := ConvolutionLayer[output, {5, 5}, &amp;#034;PaddingSize&amp;#034; -&amp;gt; 2]&#xD;
    pool[size_] := PoolingLayer[{size, size}, &amp;#034;Stride&amp;#034; -&amp;gt; size]&#xD;
    lenet = NetChain[&#xD;
      {conv[32], Ramp, conv[32], Ramp, pool[2], conv[64], Ramp, conv[64], &#xD;
       Ramp, pool[2], conv[128], Ramp, conv[128], Ramp, conv[128], Ramp, &#xD;
       PoolingLayer[{9, 9}, &amp;#034;Stride&amp;#034; -&amp;gt; 9, &amp;#034;Function&amp;#034; -&amp;gt; Mean], &#xD;
       FlattenLayer[], DropoutLayer[], 73, SoftmaxLayer[]},&#xD;
      &amp;#034;Output&amp;#034; -&amp;gt; NetDecoder[{&amp;#034;Class&amp;#034;, Extract[yogaposes, chosenPoses]}],&#xD;
      &amp;#034;Input&amp;#034; -&amp;gt; NetEncoder[{&amp;#034;Image&amp;#034;, {64, 64}, ColorSpace -&amp;gt; &amp;#034;Grayscale&amp;#034;}]&#xD;
      ]&#xD;
&#xD;
The training set then consists of generating 10-15 points inside the constellation region (resized and padded to allow for rotations later), and taking their DistanceTransform:&#xD;
&#xD;
    meshes[n_] := &#xD;
     meshes[n] = &#xD;
      ImagePad[ColorNegate@&#xD;
        makeSquare[&#xD;
         yogaposes[[chosenPoses[[n, 1]]]][&amp;#034;SimplifiedSchematic&amp;#034;], 44], 10]&#xD;
    trainingSet[n_, m_, iter_] := &#xD;
     With[{reg = &#xD;
        ImageMesh[meshes[n], CornerNeighbors -&amp;gt; False, &#xD;
         Method -&amp;gt; &amp;#034;MarchingSquares&amp;#034;]},&#xD;
      Thread[ColorConvert[&#xD;
           ImageAdjust[&#xD;
            DistanceTransform[Image[SparseArray[# -&amp;gt; 0, {64, 64}, 1]]]], &#xD;
           &amp;#034;Grayscale&amp;#034;] &amp;amp; /@ &#xD;
         Clip[Round@RandomPoint[reg, {iter, m}], {1, 64}] -&amp;gt; &#xD;
        yogaposes[[chosenPoses[[n, 1]]]]]]&#xD;
    exampleTrainingSet = &#xD;
     Flatten[trainingSet[#, 10, 1] &amp;amp; /@ RandomInteger[{1, 73}, 10], 1]&#xD;
&#xD;
The net took a couple of hours to train on ~100,000 examples on my CPU.&#xD;
Here we import the trained net:&#xD;
&#xD;
    lenetTrained = Import[&amp;#034;constellationsNet.wlnet&amp;#034;]&#xD;
&#xD;
## Night Sky ##&#xD;
&#xD;
We&amp;#039;re almost ready to classify the night sky. We first need the location of the 10,000 brightest stars along with their Right Ascension and Declination:&#xD;
&#xD;
    brightest = &#xD;
     StarData[EntityClass[&#xD;
       &amp;#034;Star&amp;#034;, {EntityProperty[&amp;#034;Star&amp;#034;, &amp;#034;ApparentMagnitude&amp;#034;] -&amp;gt; &#xD;
         TakeSmallest[10000]}], {&amp;#034;RightAscension&amp;#034;, &amp;#034;Declination&amp;#034;, &#xD;
       &amp;#034;ApparentMagnitude&amp;#034;}]&#xD;
&#xD;
We can plot these on the night sky using no projection (i.e. RA Vs Dec), using the sinusoidal projection (taken by Kuba&amp;#039;s excellent [answer][7] in SE) or on the celestial sphere given by the following transformations respectively:&#xD;
&#xD;
$$sinusoidal:\{(\alpha -\pi ) \cos (\delta&#xD;
   ),\delta \}$$&#xD;
&#xD;
$$map  to3D:\{\cos (\alpha ) \cos (\delta ),\sin&#xD;
   (\alpha ) \cos (\delta ),\sin (\delta&#xD;
   )\}$$&#xD;
&#xD;
![brightestStarsProjections][8]&#xD;
&#xD;
## Classification ##&#xD;
&#xD;
Finally, we use these 10,000 brightest stars to compute a multivariate smooth kernel distribution out of which to sample from and a Nearest function to compute neighboring stars. We need to of-course use our own distance function on the celestial sphere:&#xD;
&#xD;
    wrap[list_] := Block[{xs, ys},&#xD;
      {xs, ys} = Transpose[list];&#xD;
      Thread[{Mod[xs, 2 \[Pi]], Mod[ys, \[Pi], -\[Pi]/2]}]]&#xD;
    mapTo3D[\[Alpha]_, \[Delta]_] = {Cos[\[Alpha]] Cos[\[Delta]], &#xD;
       Cos[\[Delta]] Sin[\[Alpha]], Sin[\[Delta]]};&#xD;
    dist[{u_, v_}, {x_, &#xD;
       y_}] := (#1[[1]] - #2[[1]])^2 + (#1[[2]] - #2[[2]])^2 + (#1[[&#xD;
           3]] - #2[[3]])^2 &amp;amp; @@ mapTo3D @@@ {{u, v}, {x, y}}&#xD;
    pts = wrap@QuantityMagnitude[UnitConvert[brightest[[6 ;;, ;; 2]]]];&#xD;
    nf = Nearest[pts, DistanceFunction -&amp;gt; dist]&#xD;
    sm = SmoothKernelDistribution[pts]&#xD;
&#xD;
Our search algorithm is therefore defined as follows:&#xD;
&#xD;
 1. Pick a random position from the night sky distribution&#xD;
 2. Compute its 5-10 nearest neighbors&#xD;
 3. Classify those stars and their rotations by $\frac{2 \pi }{15}$&#xD;
 4. Select the rotation which gives the highest accuracy&#xD;
 5. Associate constellation to running association and repeat&#xD;
&#xD;
        rescale[list_] := Block[{xs, ys},&#xD;
          {xs, ys} = Thread[list];&#xD;
          Thread[Rescale[#, MinMax[#], {11, 54}] &amp;amp; /@ {xs, ys}]]&#xD;
        rotate[\[Alpha]_, pts_] := &#xD;
         ImageAdjust@&#xD;
          DistanceTransform[&#xD;
           Image@SparseArray[&#xD;
             Round@RotationTransform[\[Alpha] , {65/2, 65/2}][rescale[pts]] -&amp;gt;&#xD;
               0, {64, 64}, 1]]&#xD;
        sky = &amp;lt;||&amp;gt;;&#xD;
        accumulate[] := &#xD;
         Block[{pts = &#xD;
            nf[Mod[RandomVariate[sm] + {0, \[Pi]}, 2 \[Pi]] - {0, \[Pi]}, &#xD;
             RandomInteger[{5, 10}]], \[Alpha], pred},&#xD;
          {\[Alpha], pred} = &#xD;
           Last[SortBy[&#xD;
             First /@ &#xD;
              Table[Thread[{\[Alpha], &#xD;
                 lenetTrained[rotate[\[Alpha], pts], &#xD;
                  &amp;#034;TopProbabilities&amp;#034;]}], {\[Alpha], 0, 2 \[Pi], (2 \[Pi])/&#xD;
                15}], Last]];&#xD;
          If[Not[KeyExistsQ[sky, pred[[1]]]] || &#xD;
            TrueQ[sky[pred[[1]], &amp;#034;Accuracy&amp;#034;] &amp;lt; pred[[2]]],&#xD;
           AssociateTo[sky, &#xD;
            pred[[1]] -&amp;gt; &amp;lt;|&amp;#034;Accuracy&amp;#034; -&amp;gt; pred[[2]], &#xD;
              &amp;#034;Image&amp;#034; -&amp;gt; &#xD;
               HighlightImage[&#xD;
                makeSquare[pred[[1]][&amp;#034;SimplifiedSchematic&amp;#034;], &#xD;
                 64], {PointSize[Medium], Red, &#xD;
                 Round[RotationTransform[\[Alpha], 65/2 {1, 1}][rescale@pts], &#xD;
                  0.5]}], &amp;#034;Points&amp;#034; -&amp;gt; pts, &amp;#034;Angle&amp;#034; -&amp;gt; \[Alpha]|&amp;gt;], Nothing];]&#xD;
&#xD;
We can import a precomputed association with 20 such constellations:&#xD;
&#xD;
    selectedAsc = Import[&amp;#034;skyAsc.m.gz&amp;#034;]&#xD;
&#xD;
## Results ##&#xD;
&#xD;
Finally, we orient the schematic based on the optimally found angle and (manually) connect the dots.&#xD;
&#xD;
    orient[pts_, \[Alpha]_] := &#xD;
     Round[RotationTransform[\[Alpha], 65/2 {1, 1}][rescale@pts], 0.5]&#xD;
    lines = {{{10, 7, 3, 1, 4, 9, 2, 5, 8}, {2, 6}}, {{7, 3, 1, 9, &#xD;
         6}, {10, 2, 1, 8}, {4, 3, 5}}, {{7, 8, 9, 4, 3, 2, 10}, {1, 2, 6,&#xD;
          5}}, {{10, 2, 1, 3, 9, 5}, {7, 1, 4, 6, 8}}, {{5, 4, 1, 2, &#xD;
         3}}, {{10, 4, 5, 7, 9, 3, 8}, {6, 1, 2, 3}}, {{9, 5, 6, 3, 1, 2, &#xD;
         7}, {7, 4, 8}}, {{7, 6, 2, 3, 5, 8}, {9, 5, 4}, {3, 1}}, {{6, 2, &#xD;
         1, 3, 4}, {2, 5}}, {{5, 6, 4, 1, 2, 8, 3, 7}}, {{10, 6, 3, 2, &#xD;
         7}, {5, 2, 1, 4, 9, 8}}, {{9, 5, 1, 2, 4, 8, 7}, {6, 3, 8}}, {{6,&#xD;
          10, 4, 2, 1, 3, 9, 7, 5, 8}}, {{6, 7, 3, 2, 1, 4, 5}}, {{10, 8, &#xD;
         3, 6, 7, 2, 5, 9}, {5, 1, 4, 3}}, {{6, 5, 2, 1, 3}, {1, 4}}, {{5,&#xD;
          1, 2, 3}, {1, 4}}, {{6, 3, 2, 1, 4}, {3, 5}, {2, 7}}, {{3, 6, 8,&#xD;
          2, 4, 5, 1, 7}}, {{3, 1, 2, 6, 5}}};&#xD;
    makeSquareAndScale[gr_, \[Alpha]_, size_, opacity_] := &#xD;
     Block[{range, magnitudes, order, padding, newRanges, s},&#xD;
      range = AbsoluteOptions[gr, PlotRange][[1, 2]];&#xD;
      magnitudes = Abs[Subtract @@@ range];&#xD;
      order = Ordering[magnitudes, 2, Greater];&#xD;
      padding = Subtract @@ magnitudes[[order]]/2;&#xD;
      s = size/First[magnitudes[[order]]];&#xD;
      newRanges = {{-1, 1} padding + Last[range[[order]]], &#xD;
        First[range[[order]]]};&#xD;
      Graphics[{Opacity[opacity], &#xD;
        GeometricTransformation[&#xD;
         GeometricTransformation[&#xD;
          gr[[1]], {ScalingMatrix[{s, &#xD;
             s}], -1 First /@ (s Reverse@newRanges[[order]])}], &#xD;
         RotationTransform[\[Alpha], (size + 1)/2 {1, 1}]]}, &#xD;
       ImageSize -&amp;gt; size]] &#xD;
    With[{l = Map[Line, lines, {2}]},&#xD;
     Multicolumn[&#xD;
      Table[Show[&#xD;
        makeSquareAndScale[&#xD;
         Keys[selectedAsc][[i]][&#xD;
          &amp;#034;SimplifiedSchematic&amp;#034;], -selectedAsc[[i, -1]], 64, 0.25], &#xD;
        Graphics[&#xD;
         GraphicsComplex[&#xD;
          rescale[selectedAsc[[i, -2]]], {l[[i]], Red, PointSize[Large], &#xD;
           Point /@ Sort /@ Flatten /@ lines[[i]]}]], &#xD;
        ImageSize -&amp;gt; 150], {i, 20}], 5, Frame -&amp;gt; All, &#xD;
      Appearance -&amp;gt; &amp;#034;Horizontal&amp;#034;]]&#xD;
&#xD;
![found constellations][9]&#xD;
&#xD;
These can also be superimposed on the full night-sky:&#xD;
&#xD;
    Graphics[{With[{l = Map[Line, lines, {2}]},&#xD;
       Table[GraphicsComplex[&#xD;
         selectedAsc[[i, -2]], {Orange, Thickness[Large], l[[i]], Red, &#xD;
          PointSize[Medium], Point /@ Sort /@ Flatten /@ lines[[i]]}], {i,&#xD;
          20}]], Opacity[0.25], PointSize[Small], &#xD;
      Point[Complement[pts, Flatten[Values@selectedAsc[[All, -2]], 1]]]}, &#xD;
     ImageSize -&amp;gt; 750]&#xD;
&#xD;
![found overlay][10]&#xD;
&#xD;
    sinusoidal[\[Alpha]_, \[Delta]_] = {(\[Alpha] - \[Pi]) Cos[\[Delta]], \&#xD;
    \[Delta]}&#xD;
    Graphics[{With[{l = Map[Line, lines, {2}]},&#xD;
       Table[GraphicsComplex[&#xD;
         sinusoidal @@@ selectedAsc[[i, -2]], {Orange, Thickness[Large], &#xD;
          l[[i]], Red, PointSize[Medium], &#xD;
          Point /@ Sort /@ Flatten /@ lines[[i]]}], {i, 20}]], &#xD;
      Opacity[0.25], PointSize[Small], &#xD;
      Point[sinusoidal @@@ &#xD;
        Complement[pts, Flatten[Values@selectedAsc[[All, -2]], 1]]]}, &#xD;
     ImageSize -&amp;gt; 750]&#xD;
&#xD;
![found sinusoidal][11]&#xD;
&#xD;
It is then a matter of Overlaying these found constellations to existing images of night skies to produce the images at the beginning of the post:&#xD;
&#xD;
    overlay[{img_, constellation_}, {size_, loc_, opac_}] := &#xD;
     ImageCompose[imgs[[img]], &#xD;
      ImageResize[&#xD;
       Show[makeSquareAndScale[&#xD;
         Keys[selectedAsc][[constellation]][&#xD;
          &amp;#034;SimplifiedSchematic&amp;#034;], -selectedAsc[[constellation, -1]], 64, &#xD;
         opac], Graphics[&#xD;
         GraphicsComplex[&#xD;
          rescale[selectedAsc[[constellation, -2]]], {White, &#xD;
           Thickness[0.0075], Line /@ lines[[constellation]], White, &#xD;
           PointSize[.025], &#xD;
           Point /@ Sort /@ Flatten /@ lines[[constellation]]}]], &#xD;
        ImageSize -&amp;gt; 1000], size], Scaled[loc]]&#xD;
&#xD;
## Conclusions / Lessons Learned ##&#xD;
 &#xD;
 - It IS possible to find collections of stars in the night sky matching all sorts of shapes. Other built-in entities to try are Pokemons, Dinosaurs etc&#xD;
 - Not all the found constellation work &amp;#039;perfectly&amp;#039;&#xD;
 - Machine Learning is a powerful tool, and the WL implementation makes it easy to get started&#xD;
 - Reformulating the problem to an easier, already solved problem (e.g. points -&amp;gt; 2D image input) can help Classification Accuracy&#xD;
 - Perhaps the most interesting aspect of neural networks now, is diversifying its applications - so be creative&#xD;
&#xD;
This work was presented at the 2017 WTC (as part of a larger talk entitled &amp;#034;(De)Generative Art&amp;#034;). &amp;lt;br&amp;gt;&#xD;
I look forward to any comments/suggestions.&#xD;
&amp;lt;br&amp;gt;&#xD;
&amp;lt;br&amp;gt;George&#xD;
&amp;lt;br&amp;gt;&#xD;
&amp;lt;br&amp;gt; PS The editor doesn&amp;#039;t seem to let me attach the .wlnet and .m.gz files.&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com//c/portal/getImageAttachment?filename=exampleImages.png&amp;amp;userId=11733&#xD;
  [2]: http://community.wolfram.com//c/portal/getImageAttachment?filename=exampleImages.png&amp;amp;userId=616023&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=4214constellationsGraphic.png&amp;amp;userId=616023&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=randomPointsInmesh.png&amp;amp;userId=616023&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=distanceTransforms.png&amp;amp;userId=616023&#xD;
  [6]: https://arxiv.org/pdf/1409.1556v6.pdf&#xD;
  [7]: https://mathematica.stackexchange.com/questions/89668/geoprojection-for-astronomical-data-wrong-ticks/89792#89792&#xD;
  [8]: http://community.wolfram.com//c/portal/getImageAttachment?filename=maps.png&amp;amp;userId=616023&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=foundConstellations.png&amp;amp;userId=616023&#xD;
  [10]: http://community.wolfram.com//c/portal/getImageAttachment?filename=overlaidConstellations.png&amp;amp;userId=616023&#xD;
  [11]: http://community.wolfram.com//c/portal/getImageAttachment?filename=overlaidConstellationsSinusoidal.png&amp;amp;userId=616023</description>
    <dc:creator>George Varnavides</dc:creator>
    <dc:date>2017-10-24T04:17:44Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/852052">
    <title>Visualizing Interstellar&amp;#039;s Wormhole (Christopher Nolan Movie) with Kip S. Thorne et al. Algorithm</title>
    <link>https://community.wolfram.com/groups/-/m/t/852052</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [older image]: https://community.wolfram.com//c/portal/getImageAttachment?filename=VisualizingInterstellar%27sWormholefromarticletoprogramming.gif&amp;amp;userId=20103&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=__ezgif.com-optimize%283%29.gif&amp;amp;userId=11733&#xD;
  [2]: https://www.wolframcloud.com/obj/0af902b9-3280-4f3d-9272-454eb63c7fcd</description>
    <dc:creator>Jason Biggs</dc:creator>
    <dc:date>2016-05-06T13:44:35Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1306910">
    <title>Saturn Flyby: Detailed Simulation</title>
    <link>https://community.wolfram.com/groups/-/m/t/1306910</link>
    <description>![Saturn Flyby: Detailed Simulation][1]&#xD;
&#xD;
Creating a flyby simulation of a planetary scene in 3D involves multiple steps. This post walks you through the steps used to create the [final animation][2] (click this link or image below to play). I strongly recommend you watch the video in **full screen mode** with low lights so that all of the detail is visible. Some of it is subtle.&#xD;
&#xD;
[![enter image description here][3]][4]&#xD;
&#xD;
The Vimeo video hosting service has a habit of auto-advancing to the next video, but what it chooses as the next one is often strange in my opinion, so be prepared to click the back button to replay it. &#xD;
&#xD;
**Creating the Planet**&#xD;
&#xD;
Saturn can be treated as an oblate spheroid which we can model in the Wolfram Language using [ParametricPlot3D][5] and textures. [EntityValue][6] can give us a few pointers to get things scaled properly. First, we need to know the equatorial radius of the planet and its oblateness (e.g. how flattened it is at the poles compared to the equator).&#xD;
&#xD;
    saturnradius = &#xD;
      QuantityMagnitude[Entity[&amp;#034;Planet&amp;#034;, &amp;#034;Saturn&amp;#034;][&amp;#034;EquatorialRadius&amp;#034;], &#xD;
       &amp;#034;Kilometers&amp;#034;];&#xD;
    &#xD;
    saturnoblateness = Entity[&amp;#034;Planet&amp;#034;, &amp;#034;Saturn&amp;#034;][&amp;#034;Oblateness&amp;#034;];&#xD;
    &#xD;
    texture = &#xD;
      ImageReflect[EntityValue[Entity[&amp;#034;Planet&amp;#034;, &amp;#034;Saturn&amp;#034;], &#xD;
       &amp;#034;CylindricalEquidistantTexture&amp;#034;], Bottom];&#xD;
&#xD;
With the data above, we can construct a ParametericPlot3D of an oblate spheroid scaled to the dimensions of Saturn. We use the curated data from above to perform the scaling.&#xD;
&#xD;
    planet = ParametricPlot3D[{saturnradius Cos[t] Sin[p], &#xD;
       saturnradius Sin[t] Sin[&#xD;
         p], (1 - saturnoblateness) saturnradius Cos[p]}, {t, 0, &#xD;
       2 Pi}, {p, 0, \[Pi]}, Mesh -&amp;gt; None, PlotStyle -&amp;gt; Texture[texture], &#xD;
      Lighting -&amp;gt; &amp;#034;Neutral&amp;#034;, Boxed -&amp;gt; False, Axes -&amp;gt; False, &#xD;
      PlotPoints -&amp;gt; 100]&#xD;
&#xD;
![enter image description here][7]&#xD;
&#xD;
**Creating the Rings**&#xD;
&#xD;
The rings of Saturn lie along a plane and can be modeled as an annulus with radial color and opacity variation. We make use of a texture obtained from https://www.classe.cornell.edu/~seb/celestia/hutchison/saturn-rings.png and stored as a [CloudObject][8] in the Wolfram Cloud and use ParametricPlot3D to apply this color and opacity texture to the annulus.&#xD;
&#xD;
    ringalpha = Import[&#xD;
    CloudObject[&#xD;
       &amp;#034;https://www.wolframcloud.com/objects/4e39f856-1c09-44d1-b2a9-\&#xD;
    00ffd480b6dd&amp;#034;]];&#xD;
    &#xD;
    ringinnerradius = 74510;&#xD;
    &#xD;
    ringouterradius = 140390;&#xD;
    &#xD;
    rings = ParametricPlot3D[{r Cos[t], r Sin[t], 0}, {r, ringinnerradius,&#xD;
        ringouterradius}, {t, 0, 2 Pi}, Mesh -&amp;gt; None, &#xD;
      PlotStyle -&amp;gt; Texture[ringalpha], PlotPoints -&amp;gt; 100]&#xD;
&#xD;
![enter image description here][9]&#xD;
&#xD;
**Creating a Star Backdrop**&#xD;
&#xD;
To give some additional subtle detail, we can provide more sense of motion and context for the opacity variations in the rings by providing a backdrop of stars. We make use of EntityValue to  obtain position and brightness data for stars visible to the naked-eye (nearly 9,000 stars). This takes a couple minutes depending on your network connection.&#xD;
&#xD;
    In[9]:= stardata = &#xD;
      EntityValue[&#xD;
       EntityClass[&amp;#034;Star&amp;#034;, &amp;#034;NakedEyeStar&amp;#034;], {&amp;#034;RightAscension&amp;#034;, &amp;#034;Declination&amp;#034;, &#xD;
        &amp;#034;ApparentMagnitude&amp;#034;}];&#xD;
    &#xD;
    In[10]:= stardata // Length&#xD;
    &#xD;
    Out[10]= 8910&#xD;
&#xD;
To make use of the previous data in a graphical setting, we need to convert the [Quantity][10] objects to numbers in radians and also rescale the apparent magnitude brightness values to [GrayLevel][11] values between 0 and 1. We round the values of apparent magnitude since we want to optimize the rendering to make use of multi-point primitives later. Takes about a minute to convert the data into the necessary format.&#xD;
&#xD;
    In[11]:= triples = With[{magrange = MinMax[stardata[[All, 3]]]},&#xD;
       {-QuantityMagnitude[#[[1]], &amp;#034;Radians&amp;#034;], &#xD;
          QuantityMagnitude[#[[2]], &amp;#034;Radians&amp;#034;], &#xD;
          Rescale[Round[#[[3]]], magrange, {1, .1}]} &amp;amp; /@ stardata];&#xD;
&#xD;
Next, we group the stars based on their rounded values.&#xD;
&#xD;
    In[12]:= gb = GatherBy[triples, #[[3]] &amp;amp;];&#xD;
&#xD;
We construct the star background primitives by converting the right ascension and declination values into Cartesian spherical coordinates and place them far enough outside of the Saturn system, 8 ring radii, that they can serve as a spherical backdrop assuming our camera stays inside this distance. Each magnitude value gets a specific GrayLevel and set of points with a single [Point][12] head.&#xD;
&#xD;
    In[13]:= stars = With[{r = 8 ringouterradius},&#xD;
         {GrayLevel[#[[1, 3]]], &#xD;
          Point[{-r Cos[#[[1]]] Sin[#[[2]] + Pi/2], &#xD;
              r Sin[#[[1]]] Sin[#[[2]] + Pi/2], -r Cos[#[[2]] + &#xD;
                 Pi/2]} &amp;amp; /@ #]}] &amp;amp; /@ gb;&#xD;
&#xD;
We can then assemble the star backdrop and assign a specific [PointSize][13] to all stars, using GrayLevel, not size, to represent brightness variations.&#xD;
&#xD;
    In[14]:= starscene = Graphics3D[{PointSize[.004], stars}];&#xD;
&#xD;
**Defining the Flight Path**&#xD;
&#xD;
The flightpath is a simple straight line. Its starts &amp;#034;in front&amp;#034; of Saturn at 4 ring radii out, and always keeps the camera pointed at the planet. The position of the camera changes with time. We construct the path using [Interpolation][14], one for each Cartesian coordinate. As time progresses, the y-coordinate extends out to the side of Saturn so we don&amp;#039;t hit it. We also modify the z-coordinate to start above the ring plane and drop below it at the end.&#xD;
&#xD;
    xfun = Interpolation[{4 ringouterradius, 3 ringouterradius, 2 ringouterradius,&#xD;
         ringouterradius, 0, -ringouterradius}];&#xD;
    &#xD;
    yfun = Interpolation[{0, ringouterradius, 2 ringouterradius, &#xD;
        3 ringouterradius, 4 ringouterradius, 4 ringouterradius}];&#xD;
    &#xD;
    zfun = Interpolation[{4 saturnradius, 3 saturnradius, 2 saturnradius, &#xD;
        1 saturnradius, 0, -1 saturnradius}];&#xD;
&#xD;
**Assembling the Scene and Generating Frames**&#xD;
&#xD;
We can render an initial scene to get a sense of how it will look. We specify a point light source to look as if the system is being illuminated by the Sun from the &amp;#034;front&amp;#034;.&#xD;
&#xD;
    gr = Show[{planet, Graphics3D[{Lighting -&amp;gt; {{&amp;#034;Ambient&amp;#034;, GrayLevel[.33]}}, rings[[1]]}], starscene}, Background -&amp;gt; Black, &#xD;
      ImageSize -&amp;gt; .4 {1920, 1080}, SphericalRegion -&amp;gt; True, ViewAngle -&amp;gt; Pi/10, &#xD;
      ViewVector -&amp;gt; {{4 ringouterradius, 0, 1 saturnradius}, {0, 0, 0}}, &#xD;
      PlotRange -&amp;gt; All, &#xD;
      Lighting -&amp;gt; {{&amp;#034;Ambient&amp;#034;, GrayLevel[0]}, {&amp;#034;Point&amp;#034;, &#xD;
         White, {3 ringouterradius, 0, 3 saturnradius}}}]&#xD;
&#xD;
![enter image description here][15]&#xD;
&#xD;
The first step in animating the scene is to generate a list of frames. The elements are all static, but the camera position changes in time using [ViewVector][16] and making use of the interpolating functions created earlier. The time step is small so that we can obtain enough frames (600) to make the animation play back smoothly. The [ImageSize][17] is set to standard HD resolution.&#xD;
&#xD;
    In[19]:= frames = Table[&#xD;
       Show[gr, ViewVector -&amp;gt; {{xfun[t], yfun[t], zfun[t]}, {0, 0, 0}}, &#xD;
        ImageSize -&amp;gt; {1920, 1080}], {t, 1, 6 - 1/120, 1/120}];&#xD;
    &#xD;
    In[20]:= frames // Length&#xD;
    &#xD;
    Out[20]= 600&#xD;
&#xD;
The initial frame can be seen, scaled down, using the following. Stars are more easily seen at full resolution.&#xD;
&#xD;
    In[21]:= Show[frames[[1]], ImageSize -&amp;gt; .4 {1920, 1080}]&#xD;
&#xD;
![enter image description here][18]&#xD;
&#xD;
We need to export the frames to a directory for later assembly. The first step is to set the working directory to the same directory as the notebook.&#xD;
&#xD;
    SetDirectory[NotebookDirectory[]];&#xD;
&#xD;
Finally, we export the frames as PNG files. File names are of the form FrameXXX.png. This step of rasterizing each frame and exporting takes awhile due to the polygon count and opacity in the scene so you will need to be patient. Using [Export][19] to export individual frames, as opposed to generating a Table of frames to be exported in one pass, has at least one major advantage. It allows you to stop, at any point, and see how far you have progressed. You can monitor the directory you are exporting to to see the progress. You can abort the process and continue where you left off later.&#xD;
&#xD;
    Do[&#xD;
     Export[&amp;#034;Frame&amp;#034; &amp;lt;&amp;gt; &#xD;
        ToString[PaddedForm[i - 1, 3, NumberPadding -&amp;gt; &amp;#034;0&amp;#034;, &#xD;
          NumberSigns -&amp;gt; {&amp;#034;&amp;#034;, &amp;#034;&amp;#034;}]] &amp;lt;&amp;gt; &amp;#034;.png&amp;#034;, frames[[i]], &amp;#034;PNG&amp;#034;];,&#xD;
     {i, 1, 600, 1}&#xD;
     ]&#xD;
&#xD;
Once you have the directory of images, you can combine these into whatever video format you prefer. You can even re-import all the frames and export them from the Wolfram Language. Modern video formats are not standardized so leaves you open to a number of choices. I tend to prefer MPEG-4 with an H.264 codec for best quality and compression. Some may prefer a Quicktime animation. The choice is up to you. There are multiple tools available for combining such image sequences that range from command line tools like FFMPEG or packages like Blender. After combining the frames, you can upload the video to your favorite video sharing service such as Vimeo or YouTube. I prefer Vimeo since the compression algorithm they apply seems more optimal for quality. The final animation was already linked in the opening statement, but [here it is again][20].&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=SaturnFlyby-ezgif.com-optimize.gif&amp;amp;userId=11733&#xD;
  [2]: https://vimeo.com/260948024&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Vimeo.png&amp;amp;userId=25355&#xD;
  [4]: https://vimeo.com/260948024&#xD;
  [5]: http://reference.wolfram.com/language/ref/ParametricPlot3D.html&#xD;
  [6]: http://reference.wolfram.com/language/ref/EntityValue.html&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=5996Planet.png&amp;amp;userId=25355&#xD;
  [8]: http://reference.wolfram.com/language/ref/CloudObject.html&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=7558Rings.png&amp;amp;userId=25355&#xD;
  [10]: http://reference.wolfram.com/language/ref/Quantity.html&#xD;
  [11]: http://reference.wolfram.com/language/ref/GrayLevel.html&#xD;
  [12]: http://reference.wolfram.com/language/ref/Point.html&#xD;
  [13]: http://reference.wolfram.com/language/ref/PointSize.html&#xD;
  [14]: http://reference.wolfram.com/language/ref/Interpolation.html&#xD;
  [15]: http://community.wolfram.com//c/portal/getImageAttachment?filename=5763init.png&amp;amp;userId=25355&#xD;
  [16]: http://reference.wolfram.com/language/ref/ViewVector.html&#xD;
  [17]: http://reference.wolfram.com/language/ref/ImageSize.html&#xD;
  [18]: http://community.wolfram.com//c/portal/getImageAttachment?filename=7032Frame1.png&amp;amp;userId=25355&#xD;
  [19]: http://reference.wolfram.com/language/ref/Export.html&#xD;
  [20]: https://vimeo.com/260948024</description>
    <dc:creator>Jeffrey Bryant</dc:creator>
    <dc:date>2018-03-22T16:09:27Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2017849">
    <title>How black holes and accretion disks around them actually look</title>
    <link>https://community.wolfram.com/groups/-/m/t/2017849</link>
    <description>#Introduction&#xD;
&#xD;
One of the most thrilling parts in Nolan&amp;#039;s movie &amp;#034;Interstellar&amp;#034; is the black hole Gargantua and its accretion disk. Its weird shape has surely attracted lots of attention. But do black holes and their accretion disks actually look like that? Not exactly.&#xD;
&#xD;
![BH and accretion disk in Interstellar][1]&#xD;
&#xD;
In the paper &amp;#034;Gravitational lensing by spinning black holes in astrophysics, and in the movie Interstellar&amp;#034;, the authors say that in the movie, redshift and blueshift, as well as the intensity difference is ignored to prevent confusion to the audience. So, although the outline of the accretion disk in &amp;#034;Interstellar&amp;#034; is accurate, the color and the intensity are not. Furthermore, even in the paper, effects brought by the time delay in the propagation of light are ignored, and the influence of gravity lensing on light intensity is simplified.&#xD;
&#xD;
Though I cannot easily render a spinning black hole (Kerr black hole), what I can do is try to render an accretion disk around a Schwarzschild black hole, and as physically correct as possible. The result would be something like this (observer static at 6 times the Schwarzschild radius):&#xD;
&#xD;
![my rendering result, static observer][2]&#xD;
&#xD;
I strongly recommend you to see the videos at [Bilibili](https://www.bilibili.com/video/BV1Fp4y1S7EF) or [Youtube](https://www.youtube.com/watch?v=Dux1NkTaqwo) (Both have English subtitles) first to have a first impression, and it would be the best if you can click the vote up button XD. After that, If you would like to know more about the Mathematica realization and physical principles behind the scene, please continue.&#xD;
&#xD;
**A disclaimer first:** I know nothing about accretion disk physics, so the property of accretion disks are set arbitrarily. Furthermore, actual accretion disks are actually blazingly bright, and you would be blind instantly if you are looking at it from a short distance, so I have to make some modifications.&#xD;
&#xD;
#Analytics&#xD;
&#xD;
###Physics Perspective&#xD;
&#xD;
First, we need to analyze this problem from the physics perspective, get to know about the problems we should consider. **For observers**, the intensity of light is determined by how much photons reached their eye in a certain angle range, and the color is determined by the spectrum of the light. However, the orientation, spectrum, and intensity of light beams can be influenced by the observer&amp;#039;s movement, so we have to consider that. Naturally, the next question should be, where the light comes? Well, all the light must have come from some **light-emitting materials**, so we have to consider the light-emitting materials&amp;#039; property and movement. But the **light should travel** for some time and distance before reaching the observer&amp;#039;s eye. This process involves tracing the light from the emitter to the observer to determine the direction of light the observer perceived, as well as how much portion of light can reach the observer&amp;#039;s eyes. Till now, we have already listed out all effects, from the emission to the perception, which could influence our view, so I believe this rendering is &amp;#034;physically accurate&amp;#034;.&#xD;
&#xD;
&#xD;
### Programming Perspective&#xD;
&#xD;
But view from the programming perspective, the zeroth problem should be how lights travel around a black hole: we need the light path to calculate all other effects. Then, based on the light path, we can directly compute the equivalent of &amp;#034;brighter when closer&amp;#034; rule, as well as the time delay between light emission and observation. If combined with the movement of the light-emitting materials and the observer, we can compute the redshift and the blueshift. &#xD;
&#xD;
#Details, Theory, Coding and Results&#xD;
&#xD;
Now let&amp;#039;s assume that we are stationary observers viewing from 6 times the Schwarzchild radius.&#xD;
&#xD;
##Ray Tracing&#xD;
The first problem to solve is tracing the light beam. Light bends around black holes following the geodesics, and the most apparent consequence of this would be that the accretion disk we see would not be on a plane, but rather curved and bent. Fortunately for us, because Schwartzchild black holes are spherically symmetric, we can reduce the problem to 2D. The parametric equation of geodesics around a Schwarzschild black hole can be derived as follows:&#xD;
&#xD;
$$&#xD;
	\left\{&#xD;
	\begin{aligned}&#xD;
		t&amp;#039;&amp;#039;(\lambda)&amp;amp;=\frac{R_s r&amp;#039; t&amp;#039;}{R_s r-r^2}\\&#xD;
		r&amp;#039;&amp;#039;(\lambda)&amp;amp;=\frac{-R_s r^2 r&amp;#039;^2-2r^3\theta&amp;#039;^2(R_s-r)^2+R_s(R_s-r)^2t&amp;#039;^2}{2r^3(R_s-r)}\\&#xD;
		\theta&amp;#039;&amp;#039;(\lambda)&amp;amp;=-\frac{2r&amp;#039;\theta&amp;#039;}{r}&#xD;
	\end{aligned}&#xD;
	\right.&#xD;
$$&#xD;
&#xD;
&#xD;
Where $\lambda$ is the ray parameter.&#xD;
&#xD;
Now we construct a set of light which originates from the observer, and trace them backward:&#xD;
&#xD;
![Possible light paths][3]&#xD;
&#xD;
![Definition of variables][4]&#xD;
&#xD;
![How interpolation works][5]&#xD;
&#xD;
On each ray, we take some sample points and record the corresponding angle $\theta_0$, $\theta_1$, and time $\Delta T$. By interpolating them, we know about how a random object will look like in our eyes.&#xD;
&#xD;
    (*Initial definitions*)&#xD;
    Rs = 1;&#xD;
    R0 = 6 Rs;&#xD;
    Rmax = 6 Rs + 1.*^-6;&#xD;
    (*Tracking the light*)&#xD;
    parfunc = &#xD;
      ParametricNDSolveValue[{{tt&amp;#039;&amp;#039;[\[Tau]], &#xD;
          rr&amp;#039;&amp;#039;[\[Tau]], \[Theta]\[Theta]&amp;#039;&amp;#039;[\[Tau]]} == {(&#xD;
          Derivative[1][rr][\[Tau]] Derivative[1][tt][\[Tau]])/(&#xD;
          rr[\[Tau]] - rr[\[Tau]]^2), (&#xD;
           rr[\[Tau]]^2 Derivative[1][&#xD;
              rr][\[Tau]]^2 - (-1 + rr[\[Tau]])^2 Derivative[1][&#xD;
              tt][\[Tau]]^2)/(&#xD;
           2 (-1 + rr[\[Tau]]) rr[\[Tau]]^3) + (-1 + &#xD;
              rr[\[Tau]]) Derivative[1][\[Theta]\[Theta]][\[Tau]]^2, -((&#xD;
           2 Derivative[1][rr][\[Tau]] Derivative[&#xD;
             1][\[Theta]\[Theta]][\[Tau]])/rr[\[Tau]])}, {tt&amp;#039;[0], &#xD;
          rr&amp;#039;[0], \[Theta]\[Theta]&amp;#039;[&#xD;
           0]} == {1/(1 - Rs/R0), -Cos[\[Theta]0], &#xD;
          Sqrt[1/(1 - Rs/R0)]/R0 Sin[\[Theta]0]}, {tt[0], &#xD;
          rr[0], \[Theta]\[Theta][0]} == {0, R0, 0}, &#xD;
        WhenEvent[&#xD;
         1.01 Rs &amp;gt;= rr[\[Tau]] || &#xD;
          rr[\[Tau]] &amp;gt;= Rmax || \[Theta]\[Theta][\[Tau]] &amp;gt;= 3.1 Pi, &#xD;
         &amp;#034;StopIntegration&amp;#034;]}, {tt[\[Tau]], &#xD;
        rr[\[Tau]], \[Theta]\[Theta][\[Tau]]}, {\[Tau], 0, &#xD;
        1000}, {\[Theta]0}];&#xD;
    (*data used in interpolation*)&#xD;
    datp = Catenate@&#xD;
       Table[With[{pf = parfunc[\[Theta]]}, &#xD;
         With[{\[Tau]max = pf[[1, 0, 1, 1, 2]], df = D[Rest@pf, \[Tau]], &#xD;
           f = Rest@pf}, &#xD;
          Block[{\[Tau] = &#xD;
             Range[RandomReal[{0, \[Tau]max/500}], \[Tau]max, \[Tau]max/&#xD;
               500]}, Select[&#xD;
            Thread[(Thread@f -&amp;gt; &#xD;
               Thread@{\[Theta], &#xD;
                 ArcTan[-df[[1]], df[[2]] f[[1]] Sqrt[1 - Rs/f[[1]]]], &#xD;
                 pf[[1]]})], &#xD;
            2.4 Rs &amp;lt; #[[1, 1]] &amp;lt; 5.6 Rs &amp;amp;&amp;amp; -0.05 Pi &amp;lt; #[[1, 1]] &amp;lt; &#xD;
               3.08 Pi &amp;amp;]]]], {\[Theta], &#xD;
         Range[-2.5 Degree, 80 Degree, 1 Degree]~Join~&#xD;
          Range[20.2 Degree, 28.2 Degree, 0.5 Degree]~Join~&#xD;
          Range[23.025 Degree, 24.05 Degree, 0.05 Degree]~Join~&#xD;
          Range[23.2825 Degree, 23.4 Degree, 0.005 Degree]~Join~&#xD;
          Range[23.28525 Degree, 23.30025 Degree, 0.001 Degree]}];&#xD;
    datp = First /@ GatherBy[datp, Floor[#[[1]]/{0.01 Rs, 1 Degree}] &amp;amp;];&#xD;
    &#xD;
    (*Construct InterpolatingFunctions*)&#xD;
    ReceiveAngleFunction = &#xD;
      Interpolation[Thread[{datp[[;; , 1]], datp[[;; , 2, 1]]}], &#xD;
       InterpolationOrder -&amp;gt; 1];&#xD;
    EmitAngleFunction = &#xD;
     Interpolation[Thread[{datp[[;; , 1]], datp[[;; , 2, 2]]}], &#xD;
      InterpolationOrder -&amp;gt; 1];&#xD;
    DelayFunction = &#xD;
     Interpolation[Thread[{datp[[;; , 1]], datp[[;; , 2, 3]]}], &#xD;
      InterpolationOrder -&amp;gt; 1];&#xD;
    (*Angle vs time of observation*)&#xD;
    GenerateAngleFunctions[R1_, \[Theta]1_] := Block[{\[Phi]1},&#xD;
      With[{interpol = &#xD;
           Interpolation@&#xD;
            Table[{DelayFunction[R1, #] + &#xD;
               Sqrt[2 R1^3] \[Phi]1, \[Phi]1}, {\[Phi]1, 0., 2 Pi, &#xD;
              10. Degree}]},&#xD;
         With[{ts = interpol[[1, 1, 1]], tperiod = 2. Pi Sqrt[2 R1^3]}, &#xD;
          Function[t, interpol[t - Floor[t - ts, tperiod]]]]] &amp;amp; /@ ({#, &#xD;
           2 Pi - #, 2 Pi + #} &amp;amp;@ArcCos[Sin[\[Phi]1] Sin[\[Theta]1]])]&#xD;
&#xD;
If we only consider this effect, then we will have something like this:&#xD;
&#xD;
![Light bending included][6]&#xD;
&#xD;
The inner two rings correspond to the light that rotates around the black hole for more than half a round.&#xD;
&#xD;
And if we consider the propagation time of light, the right side will be a bit brighter.&#xD;
&#xD;
![Time correction included][7]&#xD;
&#xD;
This is because on the right, objects are moving away from you. So from your point of view, these particles will stay for a longer time on the right. (The reason is explained in the figure)&#xD;
&#xD;
![Illustration of how velocity influence timing][8]&#xD;
&#xD;
##&amp;#034;Brighter when Closer&amp;#034;&#xD;
The next question is about the &amp;#034;brighter when closer&amp;#034; rule. We all know that the further a bulb is, the dimmer it would appear to be. This is because the light from the bulb is approximately evenly distributed across solid angles, but as we move further, the solid angle corresponding to our eyes will be smaller. Mathematically, this is saying $I\propto S_0 \frac{d\Omega}{dS}$ where $S_0$ is the surface area of our eyes, $S$ is area, and $\Omega$ is the solid angle.&#xD;
&#xD;
![&amp;#034;Brighter when closer&amp;#034; rule in flat space][9]&#xD;
&#xD;
The same rules apply here in curved spacetime, except the light beams are weirder.&#xD;
&#xD;
![&amp;#034;Brighter when closer&amp;#034; rule in curved space][10]&#xD;
&#xD;
We know that $\frac{d\Omega}{dS}=(\frac{dx}{d\theta_x}\frac{dy}{d\theta_y})^{-1}$. While $\frac{dy}{d\theta_y}=\frac{R_0 \sin \alpha}{\sin \theta_1}$ can be derived using basic solid geometry, $\frac{dx}{d\theta_x}$ must be calculated numerically by tracing the light from the object to the observer. Similarly, we use interpolating function to generalize the result from a set of sample points to the whole space.&#xD;
&#xD;
    (*Reverse ray tracing*)&#xD;
    parfuncrev = &#xD;
      ParametricNDSolveValue[{{tt&amp;#039;&amp;#039;[\[Tau]], &#xD;
          rr&amp;#039;&amp;#039;[\[Tau]], \[Theta]\[Theta]&amp;#039;&amp;#039;[\[Tau]]} == {(&#xD;
          Derivative[1][rr][\[Tau]] Derivative[1][tt][\[Tau]])/(&#xD;
          rr[\[Tau]] - rr[\[Tau]]^2), (&#xD;
           rr[\[Tau]]^2 Derivative[1][&#xD;
              rr][\[Tau]]^2 - (-1 + rr[\[Tau]])^2 Derivative[1][&#xD;
              tt][\[Tau]]^2)/(&#xD;
           2 (-1 + rr[\[Tau]]) rr[\[Tau]]^3) + (-1 + &#xD;
              rr[\[Tau]]) Derivative[1][\[Theta]\[Theta]][\[Tau]]^2, -((&#xD;
           2 Derivative[1][rr][\[Tau]] Derivative[&#xD;
             1][\[Theta]\[Theta]][\[Tau]])/rr[\[Tau]])}, {tt&amp;#039;[0], &#xD;
          rr&amp;#039;[0], \[Theta]\[Theta]&amp;#039;[0]} == {1/(1 - Rs/R1), &#xD;
          Cos[\[Theta]0], -Sqrt[1/(1 - Rs/R1)]/R1 Sin[\[Theta]0]}, {tt[0],&#xD;
           rr[0], \[Theta]\[Theta][0]} == {0, R1, \[Theta]1}, &#xD;
        WhenEvent[\[Theta]\[Theta][\[Tau]] == 0, &#xD;
         &amp;#034;StopIntegration&amp;#034;]}, {tt[\[Tau]], &#xD;
        rr[\[Tau]], \[Theta]\[Theta][\[Tau]]}, {\[Tau], 0, &#xD;
        100}, {\[Theta]0, R1, \[Theta]1}];&#xD;
    (*data used in interpolation*)&#xD;
    \[CapitalDelta]\[Phi] = 1.*^-5;&#xD;
    intensity = &#xD;
      Catenate@Table[{{R, \[Theta]}, &#xD;
         R0^2 With[{\[Theta] = Abs[\[Theta]]}, &#xD;
           Abs[Sin[EmitAngleFunction[&#xD;
                R, \[Theta]]]/(R0 \&#xD;
    Sin[\[Theta]])]*(\[CapitalDelta]\[Phi]/(Sin[&#xD;
                 ReceiveAngleFunction[R, \[Theta]]]* &#xD;
                Subtract @@ (With[{f = &#xD;
                       parfuncrev[&#xD;
                        EmitAngleFunction[&#xD;
                        R, \[Theta]] + # \[CapitalDelta]\[Phi], &#xD;
                        R, \[Theta]][[2, 0]]}, f@f[[1, 1, -1]]] &amp;amp; /@ {-1, &#xD;
                    1})))]}, {R, 2.45 Rs, 5.55 Rs, &#xD;
         0.02 Rs}, {\[Theta], -3 Degree, 543 Degree, 2 Degree}];&#xD;
    &#xD;
    (*Construct InterpolatingFunction*)&#xD;
    IntensityFunction1 = Interpolation[intensity];&#xD;
&#xD;
![With intensity correction 1][11]&#xD;
&#xD;
The figure will be much more realistic in the aspect of intensity after we added this effect. The inner two rings are much dimmer because light bent dramatically is rare after all.&#xD;
&#xD;
##Doppler Effect and Headlight Effect&#xD;
Now its time for Doppler effect and headlight effect. These two effects are related to the movement of light-emitting objects and observers. Though the names of these effects can be forbidding, these effects are quite common in everyday life. Blueshift refers to the phenomenon that when a car is approaching you, the noise made by the car would be more acute and loud, and redshift means when the car is leaving you, the noise would quieter and be of lower frequency. &#xD;
&#xD;
![Doppler effect][12]&#xD;
&#xD;
The equation for the relativistic Doppler effect is:&#xD;
&#xD;
$$&#xD;
    f&amp;#039;=f\frac{\sqrt{1-\beta^2}}{1-\beta \cos \theta}&#xD;
$$&#xD;
&#xD;
where $\beta=\frac{v}{c}$ and $\theta$ is the angle between the velocity direction of the light-emitting object and the light emitted, as observed by an external observer. In this case, we should further add a coefficient of &#xD;
&#xD;
$$&#xD;
 f&amp;#039;&amp;#039;=f&amp;#039;\sqrt{\frac{1 - R_s/R_1}{1 - R_s/R_0}}&#xD;
$$&#xD;
&#xD;
due to general relativistic effects.&#xD;
&#xD;
Headlight effect means when you are driving a car on rainy days, no matter how the wind blows, the raindrops will always run towards the windshield. But if you stop your vehicle, you can see how the wind influences the dropping direction of rain.  &#xD;
&#xD;
![Headlight effect][13]&#xD;
&#xD;
The equation for angle transformation is:&#xD;
&#xD;
$$&#xD;
    \cos \theta&amp;#039;= \frac{\cos \theta +\beta}{1+\beta \cos \theta}&#xD;
$$&#xD;
&#xD;
and such, the intensity difference introduced by this can be written as:&#xD;
&#xD;
$$&#xD;
    \frac{dP&amp;#039;}{d\Omega}= \frac{dP}{d\Omega}\frac{\sin \theta}{\sin \theta&amp;#039;}\frac{d \theta}{d \theta&amp;#039;}=\frac{dP}{d\Omega}\frac{1 - \beta^2}{(1 -\beta \cos \theta)^2}&#xD;
$$&#xD;
&#xD;
Except for the difference in timing brought by the curved spacetime, these two effects are purely in the special relativity regime. The only thing involved in coding is tedious coordinate transformation. &#xD;
&#xD;
    (*Calculate moving speed*)&#xD;
    Calc\[Beta][{R1_, \[Theta]_, \[Phi]_}, {vr_, v\[Theta]_, v\[Phi]_}] :=&#xD;
      Sqrt[vr^2/(1 - &#xD;
           Rs/R1) + (R1 v\[Theta])^2 + (R1 Sin[\[Theta]] v\[Phi])^2]/&#xD;
      Sqrt[1 - Rs/R1]&#xD;
    (*Calculate inner product between moving direction and light direction*)&#xD;
    CalcCosAngle[{R1_, \[Theta]_, \[Phi]_}, {vr_, v\[Theta]_, v\[Phi]_}] :=&#xD;
      With[{v = {vr/Sqrt[1 - Rs/R1], R1 v\[Theta], &#xD;
         R1 Sin[\[Theta]] v\[Phi]}}, &#xD;
      MapThread[With[{\[Theta]0 = EmitAngleFunction[R1, #1]},&#xD;
         With[{vnormed = MapThread[Normalize@*List, v]}, &#xD;
          MapThread[&#xD;
           Dot, {vnormed, Thread@{Cos[\[Theta]0], #2 Sin[\[Theta]0], 0}}, &#xD;
           1]]] &amp;amp;, {{\[Theta], 2 Pi - \[Theta], 2 Pi + \[Theta]}, {-1, &#xD;
         1, -1}}]]&#xD;
    (*Frequency shift, Doppler effect + GR timing effects*)&#xD;
    FrequencyMult[R1_, \[Beta]_, cos_] := &#xD;
     Sqrt[(1 - Rs/R1)/(1 - Rs/R0)]*Sqrt[1 - \[Beta]^2]/(1 - \[Beta] cos)&#xD;
    (*Intensity shift due to headlight effect only*)&#xD;
    IntensityMult2[\[Beta]_, &#xD;
      cos_] := (Sqrt[1 - \[Beta]^2]/(1 - \[Beta] cos))^2&#xD;
&#xD;
Then we can put all these effects together and see how things works out!&#xD;
&#xD;
    &amp;lt;&amp;lt; PhysicalColor`&#xD;
    &#xD;
    IntensityFunctionScaling::usage = &amp;#034;Scale Intensity.&amp;#034;;&#xD;
    Protect@IntensityFunctionScaling;&#xD;
    &#xD;
    Options[RenderFunc] = {ColorFunction -&amp;gt; TemperatureColor, &#xD;
       ColorFunctionScaling -&amp;gt; (# &amp;amp;), IntensityFunctionScaling -&amp;gt; (# &amp;amp;), &#xD;
       &amp;#034;StaticObserver&amp;#034; -&amp;gt; True};&#xD;
    &#xD;
    RenderFunc[R1_, {\[Theta]1_, t1_, \[Gamma]1_}, {T0_, I0_}, &#xD;
      OptionsPattern[]] :=&#xD;
     Function[t, Through[#[t]]] &amp;amp;@Module[{&#xD;
        (*Velocity of observer*)&#xD;
        vobs = N@Sqrt[(1 - Rs/R0) Rs/(2 R0)],&#xD;
        (*list of \[Phi]1 parameters*)&#xD;
        \[Phi]1l = Range[0., 2 Pi, 1 Degree],&#xD;
        (*Polar coordinates \[Theta] and \[Phi]*)&#xD;
        \[Theta]l0, \[Phi]l0,&#xD;
        (*velocity of object and its norm*)&#xD;
        vrl, v\[Theta]l, v\[Phi]l, vnorml&#xD;
        },&#xD;
       (*Polar coordinate \[Theta]*)&#xD;
       \[Theta]l0 = ArcCos[Sin[\[Phi]1l] Sin[\[Theta]1]];&#xD;
       &#xD;
       (*Original \[Phi]*)&#xD;
       \[Phi]l0 = &#xD;
        ArcTan[Cos[\[Phi]1l], Sin[\[Phi]1l] Cos[\[Theta]1]] + \[Gamma]1;&#xD;
       &#xD;
       (*velocity of object*)&#xD;
       vrl = ConstantArray[0, Length@\[Phi]1l];&#xD;
       v\[Theta]l = -(Cos[\[Phi]1l] Sin[\[Theta]1])/&#xD;
          Sqrt[1 - Sin[\[Theta]1]^2 Sin[\[Phi]1l]^2]*Sqrt[Rs/(2 R1^3)];&#xD;
       v\[Phi]l = &#xD;
        1/(Cos[\[Phi]1l]^2/Cos[\[Theta]1] + &#xD;
            Cos[\[Theta]1] Sin[\[Phi]1l]^2)*Sqrt[Rs/(2 R1^3)];&#xD;
       &#xD;
       (*velocity norm*)&#xD;
       vnorml = &#xD;
        Calc\[Beta][{R1, \[Theta]l0, 0}, {vrl, v\[Theta]l, v\[Phi]l}];&#xD;
       &#xD;
       MapThread[Module[{&#xD;
           (*Observed \[Phi]1 parameter - t*)&#xD;
           \[Phi]1t = #3,&#xD;
           (*actual \[Theta] of object*)&#xD;
           \[Theta]l = #1,&#xD;
           (*angle between velocy and ray*)&#xD;
           cosl = #4,&#xD;
           (*Observed values - \[Phi]1*)&#xD;
           (*Geometry*)&#xD;
           \[Theta]obsl, \[Phi]obsl = \[Phi]l0 + #2,&#xD;
           (*Frequency and intensity shift*)&#xD;
           freqobsl, intobsl,&#xD;
           (*helper function*)&#xD;
           helpf&#xD;
           },&#xD;
          \[Theta]obsl = ReceiveAngleFunction[R1, \[Theta]l];&#xD;
          &#xD;
          (*Frequency*)&#xD;
          freqobsl = FrequencyMult[R1, vnorml, cosl];&#xD;
          &#xD;
          (*Process with the non-static observer*)&#xD;
          If[OptionValue[&amp;#034;StaticObserver&amp;#034;] =!= True,&#xD;
           Module[{\[Theta]transl, \[Phi]transl, \[Delta] = ArcSin[vobs]},&#xD;
            (*Geometrics, static frame*)&#xD;
            \[Theta]transl = ArcCos[Sin[\[Theta]obsl] Cos[\[Phi]obsl]];&#xD;
            \[Phi]transl = &#xD;
             ArcTan[Sin[\[Theta]obsl] Sin[\[Phi]obsl], Cos[\[Theta]obsl]];&#xD;
            (*Frequency shift due to movement of observer, &#xD;
            intensity shift is calculated together later*)&#xD;
            freqobsl *= (1 + vobs Cos[\[Theta]transl])/Sqrt[1 - vobs^2];&#xD;
            (*Angle shift due to movement of observer*)&#xD;
            \[Theta]transl = &#xD;
             ArcCos[(vobs + Cos[\[Theta]transl])/(1 + &#xD;
                 vobs Cos[\[Theta]transl])];&#xD;
            (*Transform back*)&#xD;
            (*Here we change the center of viewing angle so that the \&#xD;
    black hole&amp;#039;s center is at {0,0}*)&#xD;
            \[Theta]obsl = &#xD;
             ArcCos[Sin[\[Delta]] Cos[\[Theta]transl] + &#xD;
               Cos[\[Delta]] Sin[\[Theta]transl] Sin[\[Phi]transl]];&#xD;
            \[Phi]obsl = &#xD;
             ArcTan[Cos[\[Delta]] Cos[\[Theta]transl] - &#xD;
               Sin[\[Delta]] Sin[\[Theta]transl] Sin[\[Phi]transl], &#xD;
              Sin[\[Theta]transl] Cos[\[Phi]transl]]&#xD;
            ]&#xD;
           ];&#xD;
          &#xD;
          \[Phi]obsl = &#xD;
           Catenate[&#xD;
            MapIndexed[#1 + 2 Pi #2[[1]] &amp;amp;, Split[\[Phi]obsl, Less]]];&#xD;
          &#xD;
          (*Intensity*)&#xD;
          intobsl = &#xD;
           freqobsl^2*IntensityFunction1[R1, \[Theta]l]*&#xD;
            IntensityMult2[vnorml, cosl]*&#xD;
            TemperatureIntensity[freqobsl T0]/TemperatureIntensity[T0]/&#xD;
             freqobsl^4;&#xD;
          &#xD;
          (*Helper function to construct interpolating functions*)&#xD;
          helpf[l_] := Interpolation[Thread[{\[Phi]1l, l}]];&#xD;
          &#xD;
          With[{&#xD;
            cf = OptionValue[ColorFunction],&#xD;
            (*Interpolating functions*)&#xD;
            t11 = t1,&#xD;
            \[Phi]1f = #3,&#xD;
            \[Theta]func = helpf[\[Theta]obsl],&#xD;
            \[Phi]func = helpf[\[Phi]obsl],&#xD;
            freqfunc = &#xD;
             helpf[OptionValue[ColorFunctionScaling][T0 freqobsl]],&#xD;
            intfunc = &#xD;
             helpf[OptionValue[IntensityFunctionScaling][I0 intobsl]]&#xD;
            },&#xD;
            &#xD;
           (*Final function*)&#xD;
           Function[t,&#xD;
            With[{\[Phi]11 = \[Phi]1f[t + t11]},&#xD;
             {Append[cf[freqfunc[\[Phi]11]], intfunc[\[Phi]11]],&#xD;
              &#xD;
              With[{\[Theta] = \[Theta]func[\[Phi]11], \[Phi] = \&#xD;
    \[Phi]func[\[Phi]11]},&#xD;
               (*Point[{Sin[\[Theta]]Cos[\[Phi]],Sin[\[Theta]]Sin[\[Phi]],&#xD;
               Cos[\[Theta]]}]*)&#xD;
               Point[Tan[\[Theta]] {Cos[\[Phi]], Sin[\[Phi]]}]]}&#xD;
             ]]&#xD;
           ]&#xD;
          ] &amp;amp;, {{\[Theta]l0, 2 Pi - \[Theta]l0, 2 Pi + \[Theta]l0}, {0, &#xD;
          Pi, 0}, GenerateAngleFunctions[R1, \[Theta]1], &#xD;
         CalcCosAngle[{R1, \[Theta]l0, 0}, {vrl, v\[Theta]l, v\[Phi]l}]}]]&#xD;
    (*My version of rasterize, which increase color precision in dimmer areas*)&#xD;
    HDRRasterize[gr_Graphics, convertfunc_, &#xD;
      opts : OptionsPattern[Rasterize]] :=&#xD;
     Module[{rasterl = &#xD;
        Join[ColorSeparate[ColorConvert[Rasterize[gr, opts], &amp;#034;HSB&amp;#034;]], &#xD;
         ColorSeparate[&#xD;
          ColorConvert[&#xD;
           Rasterize[&#xD;
            gr /. RGBColor[r_, g_, b_, op_] :&amp;gt; RGBColor[r, g, b, 16 op], &#xD;
            opts], &amp;#034;HSB&amp;#034;]]], mask, invmask},&#xD;
      mask = Binarize[rasterl[[3]], 1/16];&#xD;
      invmask = 1 - mask;&#xD;
      ColorCombine[{&#xD;
        mask*rasterl[[1]] + invmask*rasterl[[4]],&#xD;
        mask*rasterl[[2]] + invmask*rasterl[[5]],&#xD;
        mask*convertfunc[rasterl[[3]]] + &#xD;
         invmask*convertfunc[rasterl[[6]]/16.]}, &amp;#034;HSB&amp;#034;]&#xD;
      ]&#xD;
    (*Preliminary computation*)&#xD;
    npts = 5000;&#xD;
    rflist = MapThread[&#xD;
       Function[{R1, \[Theta]1, t1, \[Gamma]1, T0, I0}, &#xD;
        RenderFunc[R1, {\[Theta]1, t1, \[Gamma]1}, {T0, I0}, &#xD;
         &amp;#034;StaticObserver&amp;#034; -&amp;gt; False(*,&#xD;
         IntensityFunctionScaling\[Rule](.7(#/.5)^0.5&amp;amp;)*)]],&#xD;
       {RandomReal[{3, 4.5}, npts],&#xD;
        RandomReal[-{83, 86} Degree, npts],&#xD;
        RandomReal[{0, 10000}, npts],&#xD;
        RandomReal[15 Degree + {-2, 2} Degree, npts],&#xD;
        RandomReal[{4000, 10000}, npts],&#xD;
        RandomReal[{.03, .1}, npts]&#xD;
        }&#xD;
       ];&#xD;
    (*rendering!!!*)&#xD;
    g = Graphics[{(*AbsolutePointSize@.1,White,Point[{Sin[20Degree]Cos[#],&#xD;
        Sin[20Degree]Sin[#],Cos[20Degree]}&amp;amp;/@Range[0.,360.Degree,&#xD;
        60.Degree]],*)AbsoluteThickness@2, &#xD;
        Map[Line[#[[;; , 2, 1]], &#xD;
           VertexColors -&amp;gt; &#xD;
            MapThread[&#xD;
             Function[{col, len, mult}, &#xD;
              MapAt[mult^2*#*0.006/len &amp;amp;, col, 4]], {#[[;; , 1]], &#xD;
              Prepend[#, #[[1]]] &amp;amp;@&#xD;
               BlockMap[Norm[#[[2]] - #[[1]]] &amp;amp;, #[[;; , 2, 1]], 2, 1], &#xD;
              Subdivide[Length[#] - 1]}]] &amp;amp;, &#xD;
         Reverse@Transpose[&#xD;
           Through[rflist[#]] &amp;amp; /@ (Range[0, 3, .1]), {3, 2, 1}], {2}]}, &#xD;
       Background -&amp;gt; Black, ImageSize -&amp;gt; {500, Automatic}, &#xD;
       PlotRange -&amp;gt; {{-1.28, 1.28}, {-0.72, 0.72}}];&#xD;
&#xD;
    HDRRasterize[g, #^(1/2.2) &amp;amp;, ImageSize -&amp;gt; {1920, 1080}]&#xD;
&#xD;
![With all effects, static observer][14]&#xD;
&#xD;
Well, because objects at left are moving towards you, they will appear much brighter and blue-ish, while objects at right are much dimmer and red-ish.&#xD;
&#xD;
We can also consider the movement of the observer, which will make the image something like this:&#xD;
&#xD;
![With all effects, observer moving][15]&#xD;
&#xD;
Hooray!&#xD;
&#xD;
The notebook can be found in the attachment or at [my github repo](https://github.com/wjxway/Realistic_Blackhole_Accretion_Disk).&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=bh10.png&amp;amp;userId=1340903&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=T_001.png&amp;amp;userId=1340903&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Path_4.png&amp;amp;userId=1340903&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=illus2.png&amp;amp;userId=1340903&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=illus1.png&amp;amp;userId=1340903&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=LightBending.png&amp;amp;userId=1340903&#xD;
  [7]: https://community.wolfram.com//c/portal/getImageAttachment?filename=WithTimeCorrection.png&amp;amp;userId=1340903&#xD;
  [8]: https://community.wolfram.com//c/portal/getImageAttachment?filename=illus3.png&amp;amp;userId=1340903&#xD;
  [9]: https://community.wolfram.com//c/portal/getImageAttachment?filename=IntensityIllus.png&amp;amp;userId=1340903&#xD;
  [10]: https://community.wolfram.com//c/portal/getImageAttachment?filename=illus4.png&amp;amp;userId=1340903&#xD;
  [11]: https://community.wolfram.com//c/portal/getImageAttachment?filename=WithIntensity1.png&amp;amp;userId=1340903&#xD;
  [12]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Doppler.jpg&amp;amp;userId=1340903&#xD;
  [13]: https://community.wolfram.com//c/portal/getImageAttachment?filename=FrontLight.jpg&amp;amp;userId=1340903&#xD;
  [14]: https://community.wolfram.com//c/portal/getImageAttachment?filename=WithAllEffects.png&amp;amp;userId=1340903&#xD;
  [15]: https://community.wolfram.com//c/portal/getImageAttachment?filename=WithObserverMoving.png&amp;amp;userId=1340903</description>
    <dc:creator>Jingxian Wang</dc:creator>
    <dc:date>2020-07-02T11:26:03Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/462064">
    <title>Mapping Total Solar Eclipse on March 20 2015</title>
    <link>https://community.wolfram.com/groups/-/m/t/462064</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/dae2b70e-000e-4df5-968f-a9ae0f563eae</description>
    <dc:creator>Jeffrey Bryant</dc:creator>
    <dc:date>2015-03-18T19:34:05Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1732567">
    <title>[WSC19] Simulating Binary Star Systems</title>
    <link>https://community.wolfram.com/groups/-/m/t/1732567</link>
    <description>![enter image description here][1]&#xD;
&#xD;
Abstract&#xD;
--------&#xD;
&#xD;
The goal of this project was to simulate binary star systems and demonstrate the process of finding binary star systems and their populating planets.  To accomplish this goal, I used a function called NBodySimulation, which describes the motions of a number of bodies subjected to predefined laws of motion.  Simulating binary star systems, I produced a number of animations that describe the motions of these celestial bodies visually.  After I succeeded in creating these animations, I moved to illustrate a practice called photometry, which astronomers use to detect binary star systems and exoplanets.  I, following in the footsteps of these astronomers, produced a series of graphics describing the change in a binary star system&amp;#039;s brightness over time.  &#xD;
&#xD;
Introduction&#xD;
------------&#xD;
&#xD;
In 1929, Edwin Hubble discovered the Andromeda galaxy and destroyed our preexisting perceptions of the universe.  The size of the universe expanded from 100 thousand light years across to 100 billion.  The probability that there exists a planet that is similar to our own increases with every galaxy that is discovered.  What was once a fantasy has become a near-reality.  Consequently, the search for binary star systems and their populating planets has gained a great deal of attention.  Astronomers everywhere are feverishly searching for binary star systems and their populating planets.  Unfortunately, finding exoplanets is an incredibly difficult task, so dim and distant are they.  Astronomers use photometrythe art of measuring changes in the intensity of light emitting from a defined areato detect these celestial bodies.  In this project, I demonstrate how astronomers detect binary star systems and their planets using photometry.  &#xD;
&#xD;
Simulating Binary Star Systems&#xD;
------------------------------&#xD;
&#xD;
Here, I have created a simulation of a complete planetary system populated with a binary star and five planets.   &#xD;
		&#xD;
    ExoDataF = &#xD;
      NBodySimulation[&#xD;
       &amp;#034;Newtonian&amp;#034;, {&amp;lt;|&amp;#034;Mass&amp;#034; -&amp;gt; SM1, &amp;#034;Position&amp;#034; -&amp;gt; SP1, &#xD;
         &amp;#034;Velocity&amp;#034; -&amp;gt; SV1|&amp;gt;,&#xD;
        &amp;lt;|&amp;#034;Mass&amp;#034; -&amp;gt; SM2, &amp;#034;Position&amp;#034; -&amp;gt; SP2, &amp;#034;Velocity&amp;#034; -&amp;gt; SV2|&amp;gt;,&#xD;
        &amp;lt;|&amp;#034;Mass&amp;#034; -&amp;gt; PM1, &amp;#034;Position&amp;#034; -&amp;gt; PP1, &amp;#034;Velocity&amp;#034; -&amp;gt; PV1|&amp;gt;,&#xD;
        &amp;lt;|&amp;#034;Mass&amp;#034; -&amp;gt; PM2, &amp;#034;Position&amp;#034; -&amp;gt; PP2, &amp;#034;Velocity&amp;#034; -&amp;gt; PV2|&amp;gt;,&#xD;
        &amp;lt;|&amp;#034;Mass&amp;#034; -&amp;gt; PM3, &amp;#034;Position&amp;#034; -&amp;gt; PP3, &amp;#034;Velocity&amp;#034; -&amp;gt; PV3|&amp;gt;,&#xD;
        &amp;lt;|&amp;#034;Mass&amp;#034; -&amp;gt; PM4, &amp;#034;Position&amp;#034; -&amp;gt; PP4, &amp;#034;Velocity&amp;#034; -&amp;gt; PV4|&amp;gt;,&#xD;
        &amp;lt;|&amp;#034;Mass&amp;#034; -&amp;gt; PM5, &amp;#034;Position&amp;#034; -&amp;gt; PP5, &amp;#034;Velocity&amp;#034; -&amp;gt; PV5|&amp;gt;}, &#xD;
       Quantity[10^30, &amp;#034;Years&amp;#034;]];&#xD;
    &#xD;
    Manipulate[&#xD;
     Graphics3D[{White,&#xD;
       Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[1]], p*SR1],&#xD;
       Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[2]], p*SR2], Gray,&#xD;
       Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[3]], 2 p*PR1],&#xD;
       Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[4]], 2 p*PR2],&#xD;
       Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[5]], 2 p*PR3],&#xD;
       Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[6]], 2 p*PR4],&#xD;
       Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[7]], 2 p*PR5]}, &#xD;
      Background -&amp;gt; Black, Boxed -&amp;gt; False, &#xD;
      PlotRange -&amp;gt; {{-2*^12, 2*^12}, {-2*^12, 2*^12}, {-2*^12, 2*^12}}],&#xD;
     {p, 10^5, 10^6},&#xD;
     {t, 0, ExoDataF[&amp;#034;SimulationTime&amp;#034;]/4, 1},&#xD;
     SaveDefinitions -&amp;gt; True]&#xD;
&#xD;
&#xD;
![enter image description here][1]&#xD;
&#xD;
To create this simulation, I pulled data from the Alpha Centauri system to generate the stars and data from our solar system to generate the planets.  This simulation is not representative of an actual binary star system; it has been artificially generated.   With that said, it can be used to demonstrate the difficult nature of detecting exoplanets.  It is relatively easy to detect the two stars (represented as large, white spheres); however, it is much more difficult to detect their populating planets (represented as small, gray spheres).  Despite access to state-of-the-art equipment, astronomers also struggle to detect exoplanets.  They have to resort to other methods.  &#xD;
&#xD;
Using Photometry to Detect Exoplanets&#xD;
-------------------------------------------------------------&#xD;
&#xD;
One can detect binary star systems and exoplanets by plotting the intensity of the light that an area in space is emitting vs time.  Here, I plot the intensity of the light that a single star in space that is unpopulated with planets is emitting vs time.  &#xD;
&#xD;
    ImageA =&#xD;
      Table[&#xD;
       ImageResize[#, {75, 75}]&#xD;
         &amp;amp; /@ (Binarize[Graphics3D[{&#xD;
            Glow[White], Black, Sphere[{0, 0, 0}, 500000 SR1]},&#xD;
           Background -&amp;gt; Black, Boxed -&amp;gt; False,&#xD;
           PlotRange -&amp;gt; {{-3*^12, 3*^12}, {-3*^12, 3*^12}, {-3*^12, &#xD;
              3*^12}}]]), 40];&#xD;
    &#xD;
    ImageAData = ImageData /@ ImageA;&#xD;
    &#xD;
    ListLinePlot[Count[1] /@ (Flatten /@ ImageAData), &#xD;
     PlotLabel -&amp;gt; &amp;#034;Brightness Curve&amp;#034;, AxesLabel -&amp;gt; {&amp;#034;Time&amp;#034;, &amp;#034;Brightness&amp;#034;}]&#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
Unsurprisingly, the intensity of the light does not fluctuate over time.  From this graph, one determines that there exists exactly one star and zero planets in this area.  &#xD;
&#xD;
Here, I plot the intensity of the light that a binary star system emits over time. &#xD;
&#xD;
    ImageB =&#xD;
      Take[&#xD;
       Flatten[&#xD;
        Table[ImageResize[#, {75, 75}]&#xD;
           &amp;amp; /@ (Binarize[Graphics3D[{&#xD;
              Glow[White], Black, &#xD;
              Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[1]], p*SR1],&#xD;
              Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[2]], p*SR2]},&#xD;
             Background -&amp;gt; Black, Boxed -&amp;gt; False,&#xD;
             PlotRange -&amp;gt; {{-3*^12, 3*^12}, {-3*^12, 3*^12}, {-3*^12, &#xD;
                3*^12}}]]),&#xD;
         {p, {500000}},&#xD;
         {t, 0, ExoDataF[&amp;#034;SimulationTime&amp;#034;]/2, &#xD;
          ExoDataF[&amp;#034;SimulationTime&amp;#034;]/100}]], 40];&#xD;
    &#xD;
    ImageBData = ImageData /@ ImageB;&#xD;
    &#xD;
    ListLinePlot[{Count[1] /@ (Flatten /@ ImageBData)}, PlotRange -&amp;gt; All, &#xD;
     PlotLabel -&amp;gt; &amp;#034;Brightness Curve&amp;#034;, AxesLabel -&amp;gt; {&amp;#034;Time&amp;#034;, &amp;#034;Brightness&amp;#034;}]&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
Notice that the intensity of the light dips periodically. These fluctuations indicate that there exist two celestial bodies. &#xD;
&#xD;
 The intensity of the light is greatest when both bodies are visible:&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
And least when one body eclipses the other:&#xD;
&#xD;
![enter image description here][6]&#xD;
&#xD;
Here, I plot the intensity of the light that a binary star system populated with exactly one planet emits.&#xD;
&#xD;
    ImageC =&#xD;
      Take[&#xD;
       Flatten[&#xD;
        Table[ImageResize[#, {75, 75}]&#xD;
           &amp;amp; /@ (Binarize[Graphics3D[{&#xD;
              Glow[White], Black, &#xD;
              Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[1]], p*SR1],&#xD;
              Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[2]], p*SR2],&#xD;
              Glow[Black], &#xD;
              Sphere[Values[ExoDataF[&amp;#034;Position&amp;#034;, t]][[4]], 3 p*PR2]},&#xD;
             Background -&amp;gt; Black, Boxed -&amp;gt; False,&#xD;
             PlotRange -&amp;gt; {{-3*^12, 3*^12}, {-3*^12, 3*^12}, {-3*^12, &#xD;
                3*^12}}]]),&#xD;
         {p, {500000}},&#xD;
         {t, 0, ExoDataF[&amp;#034;SimulationTime&amp;#034;]/2, &#xD;
          ExoDataF[&amp;#034;SimulationTime&amp;#034;]/100}]], 40];&#xD;
    &#xD;
    ImageCData = ImageData /@ ImageC;&#xD;
    &#xD;
    ListLinePlot[{Count[1] /@ (Flatten /@ ImageCData)}, PlotRange -&amp;gt; All, &#xD;
     PlotLabel -&amp;gt; &amp;#034;Brightness Curve&amp;#034;, AxesLabel -&amp;gt; {&amp;#034;Time&amp;#034;, &amp;#034;Brightness&amp;#034;}]&#xD;
&#xD;
![enter image description here][7]&#xD;
&#xD;
One determines that there exist two stars and at least one planet by observing the magnitude of each fluctuation.  A change of 200 units indicates that one of the stars eclipses the other.  A change of 30 units a planet.  The planet is much smaller than both of the two stars; therefore, it has a much smaller impact on the intensity of the light emitting from the area.  &#xD;
&#xD;
Notice that the planet covers but a small portion of the stars:&#xD;
&#xD;
![enter image description here][8]&#xD;
&#xD;
Conclusions&#xD;
-----------&#xD;
&#xD;
It is difficult to detect binary star systems and their populating planets; however, it is not impossible.  Using photometry, astronomers can uncover small, dimly-lit bodies orbiting stars light years away.  In this project, I explain how difficult it is to detect the planets populating a binary star system and demonstrate the methods used to do so.  I had to learn how to use a function called NBodySimulation in order to produce the simulations shown in this notebook.  Once I learned how to use this function effectively, I began generating data and creating visualizations depicting dots in a 2D plane.   Most of the simulations that I created I made using data that I generated.  After producing these simulations, I moved to create a complete planetary system populated with a binary star and five planets.  Generating this simulation, I noticed that the planets are difficult to see, much smaller and dimmer than their parents.  I began to wonder how astronomers detect binary star systems and their populating planets, which led me to investigate a practice used to detect these bodies called photometry.  To demonstrate how one detects binary star systems and exoplanets using photometry, I produced a series of graphs that depict the changes in the intensity of the light emitting from the window.  One should be able to detect the stars and planets in the simulation solely from these graphs.  &#xD;
&#xD;
Future Works&#xD;
------------&#xD;
&#xD;
Allotted more time, I would design a function that would allow the user to alter the masses, radii, positions, velocities, and number of bodies present in the interface in real time.  I attempted to apply Manipulate to NBodySimulation, but since NBodySimulation produces cooked data, such an approach is not applicable.  I also would create a visualization describing what happens when a star expands beyond its Roche Lobe.  Such a visualization would help illustrate the chaotic nature of these binary star systems.  I also would produce a visualization depicting what one would see, standing on the surface of an exoplanet looking up.  Imagine standing on the surface of a planet orbiting between a pair of stars.  Everywhere is day; only along the planets prime meridian would you be able to experience twilight.  It would have been a fun, engaging endeavor to try to create such a visualization.  &#xD;
&#xD;
Definitions&#xD;
-----------&#xD;
&#xD;
I generated the data to make the simulations shown here.  However, I based these numbers on data that I pulled on the Alpha Centauri system and the planets present in our solar system.  &#xD;
&#xD;
&#xD;
    SM1 = Quantity[2.188*^32, &amp;#034;kg&amp;#034;];&#xD;
    SM2 = Quantity[2.80402*^31, &amp;#034;kg&amp;#034;];&#xD;
    PM1 = Quantity[2.00*^24, &amp;#034;kg&amp;#034;];&#xD;
    PM2 = Quantity[1.97*^26, &amp;#034;kg&amp;#034;];&#xD;
    PM3 = Quantity[3.35*^23, &amp;#034;kg&amp;#034;];&#xD;
    PM4 = Quantity[5.69*^24, &amp;#034;kg&amp;#034;];&#xD;
    PM5 = Quantity[2.777*^25, &amp;#034;kg&amp;#034;];&#xD;
    &#xD;
    SR1 := 8.511*^5;&#xD;
    SR2 := 6.005*^5;&#xD;
    PR1 := 6.371*^4;&#xD;
    PR2 := 6.991*^4;&#xD;
    PR3 := 2.439*^4;&#xD;
    PR4 := 6.371*^4;&#xD;
    PR5 := 5.823*^4;&#xD;
    &#xD;
    SP1 = Quantity[{0, 0, 0}, &amp;#034;AstronomicalUnit&amp;#034;];&#xD;
    SP2 = Quantity[{0, 11.2, 0}, &amp;#034;AstronomicalUnit&amp;#034;];&#xD;
    PP1 = Quantity[{-11.2, 5.6, 0}, &amp;#034;AstronomicalUnit&amp;#034;];&#xD;
    PP2 = Quantity[{0, -5.2, 5.2}, &amp;#034;AstronomicalUnit&amp;#034;];&#xD;
    PP3 = Quantity[{5.2, -5.2, 13.5}, &amp;#034;AstronomicalUnit&amp;#034;];&#xD;
    PP4 = Quantity[{1, -11.2, 11.2}, &amp;#034;AstronomicalUnit&amp;#034;];&#xD;
    PP5 = Quantity[{1, 13.5, -5}, &amp;#034;AstronomicalUnit&amp;#034;];&#xD;
    &#xD;
    SV1 = Quantity[{-21.4, 0, 0}, &amp;#034;km&amp;#034;]/sec;&#xD;
    SV2 = Quantity[{20.6, 0, 0}, &amp;#034;km&amp;#034;]/sec;&#xD;
    PV1 = Quantity[{20.5, 0, 0}, &amp;#034;km&amp;#034;]/sec;&#xD;
    PV2 = Quantity[{0, 15.7, 0}, &amp;#034;km&amp;#034;]/sec;&#xD;
    PV3 = Quantity[{-19.5, 0, 0}, &amp;#034;km&amp;#034;]/sec;&#xD;
    PV4 = Quantity[{-21.5, 0, 0}, &amp;#034;km&amp;#034;]/sec;&#xD;
    PV5 = Quantity[{0, 18.9, 0}, &amp;#034;km&amp;#034;]/sec;&#xD;
&#xD;
References&#xD;
----------&#xD;
&#xD;
Transit Photometry: A Method for Finding Earths. The Planetary Society, [www.planetary.org/explore/space-topics/exoplanets/transit-photometry.html][9]. Accessed 11 Jul. 2019. &#xD;
&#xD;
Discovery: Other Galaxies Exist. Amazing Space, amazing-[space.stsci.edu/resources/explorations/groundup/lesson/scopes/mt_wilson/discovery.php][10]. Accessed 11 Jul. 2019. &#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=10441PlanetarySystem.gif&amp;amp;userId=1724598&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=PlanetarySystem.gif&amp;amp;userId=1724598&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=BrightnessCurve.PNG&amp;amp;userId=1724598&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=BrightnessCurveB.PNG&amp;amp;userId=1724598&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=BinaryStarBAV.PNG&amp;amp;userId=1724598&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=BinaryStarOIV.PNG&amp;amp;userId=1724598&#xD;
  [7]: https://community.wolfram.com//c/portal/getImageAttachment?filename=BrightnessCurveC.PNG&amp;amp;userId=1724598&#xD;
  [8]: https://community.wolfram.com//c/portal/getImageAttachment?filename=BinaryStarE3.PNG&amp;amp;userId=1724598&#xD;
  [9]: http://www.planetary.org/explore/space-topics/exoplanets/transit-photometry.html&#xD;
  [10]: http://space.stsci.edu/resources/explorations/groundup/lesson/scopes/mt_wilson/discovery.php</description>
    <dc:creator>Drake Hayes</dc:creator>
    <dc:date>2019-07-12T01:03:09Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/463610">
    <title>From Ukraine: photo and map of the solar eclipse Mar 20, 2015</title>
    <link>https://community.wolfram.com/groups/-/m/t/463610</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/2fb30490-e074-40c2-99f3-80634810ef4d</description>
    <dc:creator>Vitaliy Kaurov</dc:creator>
    <dc:date>2015-03-20T17:02:11Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3398690">
    <title>Unveiling the Europa Clipper&amp;#039;s Unusual Route to Jupiter&amp;#039;s Moon: documentary tech notes</title>
    <link>https://community.wolfram.com/groups/-/m/t/3398690</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/048a5e88-a763-4c00-9a1f-c24d4a57382f</description>
    <dc:creator>Jeffrey Bryant</dc:creator>
    <dc:date>2025-02-21T17:28:51Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/465606">
    <title>Path of the total 2017 solar eclipse across US</title>
    <link>https://community.wolfram.com/groups/-/m/t/465606</link>
    <description>![Path of the total 2017 solar eclipse across US][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=dsfq54wtrhywgtreadffa.gif&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/38d6ce56-a5c1-4b20-95ab-8458fe366f24</description>
    <dc:creator>Vitaliy Kaurov</dc:creator>
    <dc:date>2015-03-23T22:47:35Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/471232">
    <title>Solar eclipses on other planets</title>
    <link>https://community.wolfram.com/groups/-/m/t/471232</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/dd8fb9a3-d593-4377-863e-8f4b75252b0c</description>
    <dc:creator>Jeffrey Bryant</dc:creator>
    <dc:date>2015-04-01T00:53:17Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/934452">
    <title>[GOLF] Code-Golfing websites: How old are you on another planet?</title>
    <link>https://community.wolfram.com/groups/-/m/t/934452</link>
    <description>*NOTE*: see the **article below** about **making** this website or **click** on the image to go to the **actual website**.&#xD;
&#xD;
&#xD;
----------&#xD;
[![enter image description here][1]](https://wolfr.am/howoldplanet)&#xD;
&#xD;
Because WL has immense and constantly increasing vocabulary of functions and data (*THE only* language that has an ocean of built-in curated data), it is easy to come up with fun challenges or pack whole applications in a few lines of code. Below there are 3 examples that compute person&amp;#039;s age on other planets in planet&amp;#039;s days and years. Starting with very simple code-golfing exercises it is quite fast to build up to a whole beautiful interactive website and I will walk you through this.&#xD;
&#xD;
&#xD;
----------&#xD;
&#xD;
&#xD;
Code Golf: 74 characters&#xD;
-------------&#xD;
&#xD;
*[Code golf][3] is a fun coding competition with participants aiming for the shortest possible code that implements an algorithm.*&#xD;
&#xD;
Can anyone come up with a shorter version version of the following code? &#xD;
&#xD;
    f=PlanetData;Grid[{f[],(Now-DateObject[{1961, 8, 4}])/f[f[],&amp;#034;OrbitPeriod&amp;#034;]}]&#xD;
&#xD;
or prettified version:&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
Here the date is assumed to be someone&amp;#039;s birthday (for the curious - who&amp;#039;s birthday is it?). The output should be in a nice readable table-like from. According to this little counter I got 74 characters:&#xD;
&#xD;
    Framed[Column[{&#xD;
    	Dynamic[Style[&amp;#034;code length = &amp;#034;&amp;lt;&amp;gt;ToString[StringLength[StringDelete[x,&amp;#034; &amp;#034;]]],20,Red]],&#xD;
    	InputField[Dynamic[x],String,ContinuousAction-&amp;gt;True,FieldHint-&amp;gt;&amp;#034;Enter code in InputForm&amp;#034;]&#xD;
    }]]&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
&#xD;
Tweet-a-Program&#xD;
---------------&#xD;
&#xD;
Another challenge actually would be to make a nice tweet out of it for [Wolfram Tweet-a-Program][6] (TaP). Interesting thing is not to use just a date, but a ***famous person name***. Can you make this shorter? Code for Tap (note the syntax `=[...]` as it is the equivalent of CTRL+= in front end) and the [**actual tweet itself**][7]:&#xD;
&#xD;
    f=PlanetData;TableForm[Transpose[{(Now- =[Obama bday])/f[f[],&amp;#034;OrbitPeriod&amp;#034;],f[]}],TableHeadings-&amp;gt;{None,{&amp;#034;Obama age&amp;#034;,&amp;#034;Planet&amp;#034;}}]&#xD;
&#xD;
![enter image description here][8]&#xD;
&#xD;
&#xD;
Interactive microsite&#xD;
---------&#xD;
&#xD;
It is important to remember that due to planet&amp;#039;s &amp;#034;OrbitPeriod&amp;#034; property we are considering age in years. We could consider planet&amp;#039;s &amp;#034;RotationPeriod&amp;#034; around axis and so count the age in planet&amp;#039;s days. Code will still stay so short that it is easy to build a whole microsite from it giving people interface to play with their birthday dates and astronomy facts. Here is a simple function that gets astronomical data and oranges them into a table. &#xD;
&#xD;
    hoap[bd_,u_]:=Module[&#xD;
    	&#xD;
    	{period,imgs,&#xD;
    	data=EntityValue[&amp;#034;Planet&amp;#034;, {&amp;#034;Name&amp;#034;,&amp;#034;Image&amp;#034;,&amp;#034;RotationPeriod&amp;#034;,&amp;#034;OrbitPeriod&amp;#034;}]},&#xD;
    	&#xD;
    	period=(Now-bd)/data[[All,u]];&#xD;
    	imgs=ConformImages[data[[All,2]],400];&#xD;
    	&#xD;
    	Style[&#xD;
    	Grid[{&#xD;
    		data[[;;4,1]],period[[;;4]],imgs[[;;4]],&#xD;
    		data[[-4;;,1]],period[[-4;;]],imgs[[-4;;]]},&#xD;
    	Alignment-&amp;gt;Left],&#xD;
    	FontSize-&amp;gt;20,Red]	&#xD;
    ]&#xD;
&#xD;
To design user interface via a microsite we will use FormPage function:&#xD;
&#xD;
    CloudDeploy[&#xD;
    	FormPage[&#xD;
    		{&amp;#034;birthday&amp;#034;-&amp;gt;&amp;#034;Date&amp;#034;,&#xD;
    		&amp;#034;time&amp;#034; -&amp;gt; {&amp;#034;years&amp;#034; -&amp;gt; 4, &amp;#034;days&amp;#034; -&amp;gt; 3}}, &#xD;
    		hoap[#birthday,#time]&amp;amp;,&#xD;
    		AppearanceRules-&amp;gt;&amp;lt;|&#xD;
    			&amp;#034;Title&amp;#034; -&amp;gt; &amp;#034;How old are you on another planet?&amp;#034;, &#xD;
    			&amp;#034;Description&amp;#034; -&amp;gt; &amp;#034;&#xD;
    				Albert Einstein would now be 5 years old on Saturn and vampire-old on Mercury. See his BD below. Try it it yourself.&#xD;
    				Planet rotational period defines days, and its orbital period - years.&amp;#034;|&amp;gt;,&#xD;
    		FormTheme -&amp;gt; &amp;#034;Black&amp;#034;&#xD;
    	][&amp;lt;|&amp;#034;birthday&amp;#034; -&amp;gt; &amp;#034;March 14, 1879&amp;#034;, &amp;#034;time&amp;#034; -&amp;gt; 4|&amp;gt;],&#xD;
    &amp;#034;howoldplanet&amp;#034;,Permissions-&amp;gt;&amp;#034;Public&amp;#034;]&#xD;
&#xD;
    Out[]= CloudObject[&amp;#034;https://www.wolframcloud.com/objects/user-3c5d3268-040e-45d5-8ac1-25476e7870da/howoldplanet&amp;#034;]&#xD;
&#xD;
It gives us a URL if a cloud object where our microsite resides. To have a shorter version we compute:&#xD;
&#xD;
    URLShorten[%[[1]], &amp;#034;howoldplanet&amp;#034;]&#xD;
&#xD;
https://wolfr.am/howoldplanet&#xD;
&#xD;
and following that URL you will arrive at a simple but stylish microsite shown at the top of this page. Hooray! &#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-10-05at8.19.27AM2.png&amp;amp;userId=11733&#xD;
  [2]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-10-05at6.30.41AM.png&amp;amp;userId=11733&#xD;
  [3]: https://en.wikipedia.org/wiki/Code_golf&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-10-04at5.40.52PM.png&amp;amp;userId=11733&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=2904ScreenShot2016-10-04at5.44.31PM.png&amp;amp;userId=11733&#xD;
  [6]: https://twitter.com/wolframtap&#xD;
  [7]: https://twitter.com/wolframtap/status/783450755743318016&#xD;
  [8]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Ct9gT0VWgAAck8l.jpg&amp;amp;userId=11733</description>
    <dc:creator>Vitaliy Kaurov</dc:creator>
    <dc:date>2016-10-04T22:46:17Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/803953">
    <title>The Culmination of Moon</title>
    <link>https://community.wolfram.com/groups/-/m/t/803953</link>
    <description>This discussion is inspired by [the question from a Mathematica user][1]. The post involves decent vector calculus and Mathematica code so it deserves a designated page for the presentation. Besides the mathematical challenge, I also comprehensively use advanced Wolfram technologies such as [Wolfram Alpha with nature language processing][2], [geographic database][3], [real world entities][4] and Mathematica&amp;#039;s powerful visualization capability ([like the gauge GUI][5]). &#xD;
&#xD;
Please download the attached notebook to run all the code snippets. Feel free to play around the technology here and hopefully you will learn more about how to use these great features of the Wolfram platform. &#xD;
&#xD;
The problem states the following&#xD;
&#xD;
&amp;gt;  Find the location on the surface of earth where the moon sits at zenith, given the moon&amp;#039;s position at the observers location (in terms of azimuth and altitude angle) &#xD;
&#xD;
Conclusion&#xD;
-------------&#xD;
&#xD;
On *2/25/2016 at 23:30 Chicago time zone*, the people, who reside at the location shown on the map, see the moon right above their head. In scientific term, the altitude of the moon position at the location is 90 degree. &#xD;
&#xD;
![enter image description here][6]&#xD;
&#xD;
Analysis&#xD;
-------------&#xD;
&#xD;
Since the position of moon is changing as time goes by, I would like to use the following function to take a snapshot of the motion at &#xD;
&#xD;
    dateObj = DateObject[{2016, 2, 25, 23, 30}] (* The moment that I started to write this blog *)&#xD;
&#xD;
The moon position from my view at the city of Champaign, IL:&#xD;
&#xD;
![mp][7]&#xD;
&#xD;
You can check the result from [Daily Moon Position][8] as well. This is the screenshot of the result online at the given location and time spot. [The zip codes of Champaign IL includes 61821][9] &#xD;
&#xD;
![mp2][10]&#xD;
&#xD;
We can visualize the above results using the Mathematica powerful UI controls. In the azimuth meter, 0 denotes the true north; 180 the  sourth; 90 the east; 270 the west. You can imagine that this compass is put on the ground or on the tangential plane of the earth at a particular instance. In my case , it is Champaign, IL . This Mathematica GUI is more visually pleasant than the previous screenshot. &#xD;
&#xD;
![gui1][11]&#xD;
&#xD;
The idea to solve this problem is to use the coordinate tranformation: convert the coordinate of the moon in the frame of the local observer to the space cartesian coordinate. Meanwhile, we convert, again, the coordinate of the moon from the earth&amp;#039;s sperical coordicate to the same Cartesian system. We equate the two expressions to find the right values of the latitude and longitude of the location where the culmination of the moon is observed. Then we shall check the moon position at the output location to see if the altitude is 90 degree. &#xD;
&#xD;
The flow of analysis is &#xD;
&#xD;
![diagram3][12]&#xD;
&#xD;
To solve the problem we also need the geo location of Champaign IL : &#xD;
&#xD;
![chgp][13] &#xD;
&#xD;
I will use the (radius, arithmus, polar) convension that is applied throughout on this page: http://mathworld.wolfram.com/SphericalCoordinates.html. &#xD;
&#xD;
The convension is such that the cartesian center coincides with the center of the earth. Meanwhile, the x-axis of the coordinate passes through the intersection of prime meridian and equator. The y axis passes through the intersection of 90th meridan east and equator. The z-axis points to north pole. The diagram for longitude ($\lambda$) and latitude ($\phi$) is shown on the diagram ([Source][14]): &#xD;
&#xD;
![enter image description here][15]&#xD;
&#xD;
Thus, given the geo position of my local spot, I can obtain the new coordinate by `CoordinateTransformData` function. The radius is simply the average radius of the earth. I can extract the value from the Wolfram Database for astronomy automatically&#xD;
&#xD;
![er][16]&#xD;
&#xD;
Convert the result to pure number. One thing to mention here the polar angle used in `CoordinateTransformData ` function is the complementary angle of the latitude, aka ($\pi/2 - $ latitude) &#xD;
&#xD;
![chcoor][17]&#xD;
&#xD;
We can also find the distance from the center of the earth to the center of the moon using the following query. If you query &amp;#034;distance from earth to moon &amp;#034; you might have a different result because Wolfram Alpha use the current time frame to retrieve the information or it simply return the average distance. &#xD;
&#xD;
![lunardist][18]&#xD;
&#xD;
These are the bases in the Cartesian coordinate: &#xD;
&#xD;
    basis = {e1, e2, e3};&#xD;
&#xD;
By quite complicated spacial coordinate transformation, &#xD;
&#xD;
![enter image description here][19]&#xD;
&#xD;
we have the following operator: &#xD;
&#xD;
    trfM[\[Lambda]_, \[Phi]_] := {{-Sin[\[Lambda]], Cos[\[Lambda]], &#xD;
       0}, {-Sin[\[Phi]]*Cos[\[Lambda]], -Sin[\[Phi]]*Sin[\[Lambda]], &#xD;
       Cos[\[Phi]]}, {Cos[\[Phi]] Cos[\[Lambda]], &#xD;
       Cos[\[Phi]] Sin[\[Lambda]], Sin[\[Phi]]}}&#xD;
&#xD;
The conversion from observer&amp;#039;s basis to the cartesian basis is the inner product we have below:&#xD;
&#xD;
    trfM[a,b].basis&#xD;
    {e2 Cos[a]-e1 Sin[a],e3 Cos[b]-e1 Cos[a] Sin[b]-e2 Sin[a] Sin[b],e1 Cos[a] Cos[b]+e2 Cos[b] Sin[a]+e3 Sin[b]}&#xD;
&#xD;
Now lets take a look at the coordinate of the moon in the observer&amp;#039;s frame: &#xD;
&#xD;
![moonCoord][20]&#xD;
&#xD;
where l is the distance between my location and the center of the moon, theta is local altitude and psi is the local azimuth angle.Use the conversion routine we have just discussed, we can obtain the cartesian coordinate of the moon: &#xD;
&#xD;
![newCoord][21]&#xD;
&#xD;
Extract the coefficient of the e1, e2 and e3. These coefficient is exactly the so-called x-y-z component of the moon&amp;#039;s position in space.&#xD;
&#xD;
    rhs=Coefficient[newCoord,#,1]&amp;amp;/@basis&#xD;
    (* {91.1542 +0.723664 l,-3024.4-0.685557 l,2549.3 -0.0795132 l} *)&#xD;
&#xD;
If we want to describe the coordinate of the moon in our Cartesian systems, we have to use `TransformationFunctionData` again: &#xD;
&#xD;
    MoonCoord=lhs=CoordinateTransformData[&amp;#034;Spherical&amp;#034;-&amp;gt;&amp;#034;Cartesian&amp;#034;, &amp;#034;Mapping&amp;#034;, {lunarDist,Pi/2-moonLat,moonLon}]&#xD;
    (* {251638. Cos[moonLat] Cos[moonLon],251638. Cos[moonLat] Sin[moonLon],251638. Sin[moonLat]}*)&#xD;
&#xD;
Back to the beginning of our solving scheme, the moon&amp;#039;s spactial location is invariant regardless of where the cartesian description is transformed from.&#xD;
This is illustrated in the diagram below: &#xD;
&#xD;
![diagram][22]&#xD;
&#xD;
Thus we have three equations: `x = x`, `y = y`, `z = z`. And three unknowns: `moonLat`, `moonLon` and `l` = *distance between Champaign IL and the center of the moon*. &#xD;
&#xD;
    sol=FindRoot[Thread[rhs==lhs],{moonLat,0},{moonLon,0},{l,lunarDist}]&#xD;
    (* {moonLat-&amp;gt;-0.0688172,moonLon-&amp;gt;-0.76686,l-&amp;gt;249678.} units: {radian, radian, mile}*)&#xD;
&#xD;
Convert the result back to the geo location: &#xD;
&#xD;
    location=GeoPosition[180/Pi*{moonLat,moonLon}/.sol]&#xD;
    (* GeoPosition[{-3.94294,-43.9378}] *)&#xD;
    MoonPosition[%,DateObject[{2016,2,25,23,30}]]&#xD;
    (* {91.60 Degree ,89.02 Degree } *)&#xD;
&#xD;
Since the altitude is almost 90 degree, I think the result is fairly close. Visually verify the result with the sky chart generated from Wolfram Alpha. It shows that the moon is about at the zenith over the computed location.&#xD;
&#xD;
![locationskc][23]&#xD;
&#xD;
One thing worth to mention here is that the equation we have solved. It could have two solutions. The geometric interpretation of the solutions is the location on the earth colinear both with the center of the earth and moon. This line connecting the center of both planets will touch the surface of earth twice. So you want to check if the moon is above head or beneath the foot. &#xD;
&#xD;
A few extra things with Wolfram Alpha&#xD;
----------&#xD;
&#xD;
 - Where is the spot we have just found on the earth? &#xD;
&#xD;
![inbrasil][24]&#xD;
&#xD;
 - How far away is it from Champaign IL? 1/6 of earth circumference is not a short distance!&#xD;
&#xD;
        WolframAlpha[&amp;#034;distance between champaign and latitude = -3.943 longitude = -43.9378&amp;#034;,{{&amp;#034;FractionOfEarthCircumference&amp;#034;,1},&amp;#034;ComputableData&amp;#034;}]&#xD;
        0.17 ~~ 1 / 6&#xD;
&#xD;
 - Any popular place near the site? &#xD;
&#xD;
![citynb][25]&#xD;
&#xD;
Further Readings&#xD;
----------&#xD;
&#xD;
 - [Longitude from Moon Culminations][26]&#xD;
 - [Wiki for lunar standstill][27]&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com/groups/-/m/t/803034&#xD;
  [2]: https://www.wolframalpha.com&#xD;
  [3]: https://reference.wolfram.com/language/guide/GeographicData.html&#xD;
  [4]: http://www.wolfram.com/language/fast-introduction-for-programmers/real-world-entities/&#xD;
  [5]: https://reference.wolfram.com/language/guide/Gauges.html&#xD;
  [6]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at12.35.27PM.png&amp;amp;userId=23928&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at12.30.54PM.png&amp;amp;userId=23928&#xD;
  [8]: http://www.dailymoonposition.com/default.aspx&#xD;
  [9]: http://www.wolframalpha.com/input/?i=zip%20code%20of%20Champaign%20IL&#xD;
  [10]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at12.39.43PM.png&amp;amp;userId=23928&#xD;
  [11]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at1.45.29PM.png&amp;amp;userId=23928&#xD;
  [12]: http://community.wolfram.com//c/portal/getImageAttachment?filename=diagram2.svg&amp;amp;userId=23928&#xD;
  [13]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at12.47.05PM.png&amp;amp;userId=23928&#xD;
  [14]: https://en.wikipedia.org/wiki/Latitude#/media/File:Latitude_and_longitude_graticule_on_a_sphere.svg&#xD;
  [15]: http://community.wolfram.com//c/portal/getImageAttachment?filename=145px-Latitude_and_longitude_graticule_on_a_sphere.svg.png&amp;amp;userId=23928&#xD;
  [16]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at12.48.58PM.png&amp;amp;userId=23928&#xD;
  [17]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at12.49.19PM.png&amp;amp;userId=23928&#xD;
  [18]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at12.51.49PM.png&amp;amp;userId=23928&#xD;
  [19]: http://community.wolfram.com//c/portal/getImageAttachment?filename=IMG_4793.jpg&amp;amp;userId=23928&#xD;
  [20]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at12.54.06PM.png&amp;amp;userId=23928&#xD;
  [21]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at12.54.52PM.png&amp;amp;userId=23928&#xD;
  [22]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at12.58.55PM.png&amp;amp;userId=23928&#xD;
  [23]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at1.04.20PM.png&amp;amp;userId=23928&#xD;
  [24]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at1.05.51PM.png&amp;amp;userId=23928&#xD;
  [25]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-02-26at1.07.32PM.png&amp;amp;userId=23928&#xD;
  [26]: http://articles.adsabs.harvard.edu//full/1899MNRAS..59..513P/0000514.000.html&#xD;
  [27]: https://en.wikipedia.org/wiki/Lunar_standstill</description>
    <dc:creator>Shenghui Yang</dc:creator>
    <dc:date>2016-02-26T19:08:20Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/578543">
    <title>Evolution of Stars: Hertzsprung-Russell diagram</title>
    <link>https://community.wolfram.com/groups/-/m/t/578543</link>
    <description>Hi,&#xD;
&#xD;
I just made a little Hertzsprung-Russell diagram for a class of mine. It&amp;#039;s not quite perfect yet, but I wanted to post it anyway.&#xD;
&#xD;
Mathematica (wikipedia?) knows what that diagram is:&#xD;
&#xD;
    WikipediaSearch[&amp;#034;Hertzsprung Russell diagram&amp;#034;]&#xD;
&#xD;
gives:&#xD;
&#xD;
&amp;gt; &amp;lt;|&amp;#034;Title&amp;#034; -&amp;gt; &amp;#034;Hertzsprung-Russell diagram&amp;#034;, &#xD;
&amp;gt;&#xD;
&amp;gt;&amp;#034;Snippet&amp;#034; -&amp;gt;  &amp;#034;The&#xD;
&amp;gt; Hertzsprung-Russell diagram, abbreviated H-R  diagram or HRD, is&#xD;
&amp;gt; a scatter graph of stars showing the relationship  between the stars&amp;#039;&#xD;
&amp;gt; absolute magnitudes or luminosities versus their  spectral&#xD;
&amp;gt; classifications or effective temperatures.&amp;#034;|&#xD;
&#xD;
All the data I need is in Mathematica.&#xD;
&#xD;
    stars = StarData[];&#xD;
&#xD;
contains data for more than 107,000 stars. I will only download data for 10,000 stars as to not overload my final image.&#xD;
&#xD;
    starChoice = RandomChoice[stars, 10000]; &#xD;
    starData = StarData[starChoice, {&amp;#034;Luminosity&amp;#034;, &amp;#034;EffectiveTemperature&amp;#034;, &amp;#034;Mass&amp;#034;, &amp;#034;Radius&amp;#034;, &amp;#034;BVColorIndex&amp;#034;, &amp;#034;Color&amp;#034;}];&#xD;
&#xD;
I access luminosity, surface temperature, mass, radius, and color data for the stars. I will want to use BubbleChart to generate the diagram. The position of the bubbles will be given by (the logarithms of) the luminosity and the surface temperature; note that the x-asis is reversed. The size of the bubbles will encode the radius and I would like to color the bubbles in a way that relates to their BVColorIndex. The most difficult issue is the colour. As a matter of fact, I will cheat a bit to make the colour distribution clearer. I use some formulas from this [website][1] for the conversion of BV to RGB colour.&#xD;
&#xD;
    {\[Lambda], x, y, z} = Import[&amp;#034;http://www.cvrl.org/database/data/cmfs/ciexyzjv.csv&amp;#034;]//Transpose;&#xD;
    XYZ[t_] := Module[{h = 6.62607*10^-34, c = 2.998*10^8, k = 1.38065*10^-23}, {x, y, z}.((2 h c^2)/((-1 + E^((h c/k)/(t \[Lambda]*10^-9))) (\[Lambda]*10^-9)^5)) // #/#[[2]] &amp;amp;]&#xD;
&#xD;
The plot is quite easy to generate from here:&#xD;
&#xD;
    normsun = QuantityMagnitude[StarData[&amp;#034;Sun&amp;#034;, &amp;#034;Luminosity&amp;#034;]];&#xD;
    BubbleChart[&#xD;
     Style[{Log[10, QuantityMagnitude[#[[2]]]], QuantityMagnitude[#[[1]]]/normsun, QuantityMagnitude[#[[4]]]}, &#xD;
        ColorConvert[XYZColor @@ XYZ[4600*((1/(0.92 #[[5]] + 1.7)^2.4 + 1/(0.92 #[[5]] + 0.62)^2.4))], &amp;#034;RGB&amp;#034;]] &amp;amp; /@ &#xD;
      Select[starData, FreeQ[#, Missing] &amp;amp;], ScalingFunctions -&amp;gt; {&amp;#034;Reverse&amp;#034;, &amp;#034;Log&amp;#034;}, Background -&amp;gt; Black, &#xD;
     FrameLabel -&amp;gt; {&amp;#034;Log(Temperature)&amp;#034;, &amp;#034;Log(Luminosity)&amp;#034;}, LabelStyle -&amp;gt; Directive[Bold, 15, White], ImageSize -&amp;gt; Full]&#xD;
&#xD;
Note that there is a &amp;#034;fudge exponent&amp;#034; of 2.4 which exaggerates the colours. This gives:&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
If you compare this figure to the [corresponding images on the wikipedia page][3], you will note that is looks quite similar to the second figure. The first figure on that website, shows a fine structure of all the sequences Ia and Ib for the supergiants, II for the bright giants, III for giants, IV for subgiants, and V for the main sequence. Then there are the white dwarfs. It appears that our diagram shows a similar sub-structure, but I might be mistaken.&#xD;
&#xD;
Our own sun is on the main sequence at the intersection at a horizontal line of normalised Log-luminosity 1. (The axis is normalised to our sun&amp;#039;s luminosity.) So our sun is &amp;#034;yellow-white&amp;#034;.   &#xD;
&#xD;
As we are already on it, we can also compare where our sun lies in terms of its mass. I therefore compute a SmoothHistogram of the masses of my 10000 stars.&#xD;
&#xD;
    SmoothHistogram[&#xD;
     Select[QuantityMagnitude[starData[[All, 3]]], NumberQ], &#xD;
     PlotRange -&amp;gt; {{0, 1.5*10^31}, All}, PlotTheme -&amp;gt; &amp;#034;Marketing&amp;#034;, &#xD;
     FrameLabel -&amp;gt; {&amp;#034;Mass&amp;#034;, &amp;#034;Density&amp;#034;}, ImageSize -&amp;gt; Full, &#xD;
     LabelStyle -&amp;gt; Directive[Bold, Medium], &#xD;
     Epilog -&amp;gt; {Red, {PointSize[0.02], &#xD;
        Point[{QuantityMagnitude[StarData[&amp;#034;Sun&amp;#034;, &amp;#034;Mass&amp;#034;]], 0}]}, Green, &#xD;
       Line[{{Median[&#xD;
           Select[QuantityMagnitude[starData[[All, 3]]], &#xD;
            NumberQ]], -0.1}, {Median[&#xD;
           Select[QuantityMagnitude[starData[[All, 3]]], NumberQ]], &#xD;
          7.5*10^-31}}], Yellow, &#xD;
       Line[{{Mean[&#xD;
           Select[QuantityMagnitude[starData[[All, 3]]], &#xD;
            NumberQ]], -0.1}, {Mean[&#xD;
           Select[QuantityMagnitude[starData[[All, 3]]], NumberQ]], &#xD;
          7.5*10^-31}}]}]&#xD;
&#xD;
 ![enter image description here][4]&#xD;
&#xD;
Our sun&amp;#039;s mass is marked by the red dot on the x-axis. The green vertical line shows the median of the distribution and the yellow line the mean. I have truncated the diagram at the large masses. The following plot shows mass vs radius:&#xD;
&#xD;
    ListPlot[QuantityMagnitude /@ Select[starData[[All, {3, 4}]], FreeQ[#, Missing] &amp;amp;], PlotTheme -&amp;gt; &amp;#034;Marketing&amp;#034;, LabelStyle -&amp;gt; Directive[Bold, 15, Black],FrameLabel -&amp;gt; {&amp;#034;Mass&amp;#034;, &amp;#034;Radius&amp;#034;}]&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
Cheers,&#xD;
&#xD;
Marco&#xD;
&#xD;
  [1]: http://mathematica.stackexchange.com/questions/57389/convert-spectral-distribution-to-rgb-color&#xD;
  [2]: /c/portal/getImageAttachment?filename=ScreenShot2015-10-09at23.18.53.png&amp;amp;userId=48754&#xD;
  [3]: https://en.wikipedia.org/wiki/Hertzsprung%E2%80%93Russell_diagram&#xD;
  [4]: /c/portal/getImageAttachment?filename=ScreenShot2015-10-09at23.27.04.png&amp;amp;userId=48754&#xD;
  [5]: /c/portal/getImageAttachment?filename=ScreenShot2015-10-09at23.39.24.png&amp;amp;userId=48754</description>
    <dc:creator>Marco Thiel</dc:creator>
    <dc:date>2015-10-09T22:45:44Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1732166">
    <title>[WSC19] Visualizing a Binary Black Hole Merger</title>
    <link>https://community.wolfram.com/groups/-/m/t/1732166</link>
    <description>**Introduction**&#xD;
&#xD;
![enter image description here][1]&#xD;
&#xD;
On September 14th, 2015, LIGO (the Laser Interferometer Gravitational-Wave Observatory), located in both Washington and Louisiana, detected a strange ping roughly 1.3 billion light years away from Earth. This ping was caused by gravitational waves as the result of a collision of two black holes which occurred just as Earths inner core began to form, only just reaching one billion years later. The purpose of this project was to visualize the relationship of a binary black hole system and the eventual collision between the two which marked a revolutionary event in the history of astrophysics. &#xD;
&#xD;
**Developing the Visualization**&#xD;
&#xD;
In order to develop the visualization, a set of differential equations had to be solved. Respectively, each equation modeled the average angular momentum magnitude along the Z-axis (seeing as the final result was to be three dimensional), the rate of change of the semi-major axis, the eccentricity, the radius, and the angular velocity about the center of inertia for the black holesthe result of which is shown here: &#xD;
&#xD;
![enter image description here][2]&#xD;
![enter image description here][3]&#xD;
![enter image description here][4]&#xD;
&#xD;
After evaluating the differential equations, graphs could be determined from which the points representing the black holes could be plotted, a place from which the final visualization could be created. Initially, two rotating points were created using an animation on a circular plot orbiting parallel to each other around the center of mass, also known as a barycenter:&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
Once this simple animation and the graphs were complete, the two were merged by a common function which allowed for the points plotted on the first animation to follow the path of the spiral graphs developed from various initial conditions provided alongside the differential equations. Initially, the animation was developed where one of the black holes remained stationary whilst the other one orbited around it following the path of the graph, but it was then changed so that both black holes would orbit around a barycenter, gradually getting closer and closer as the distance decreased but the acceleration increased, a relationship modeled by the proportionality ?r??t. &#xD;
&#xD;
![enter image description here][6]&#xD;
&#xD;
For the final, polished animation, a star-field was created which served as the background for the polished visualization (the color of space was changed to a medium blue in order to see the orbit of the black holes).&#xD;
&#xD;
![enter image description here][7]&#xD;
&#xD;
**Conclusion**&#xD;
&#xD;
In conclusion, this demonstration was able to successfully visualize a binary black hole merger as discovered by LIGO, and as predicted by Albert Einstein&amp;#039;s General Theory of Relativity in 1916. Through this visualization, we can view this incredible phenomenon and are given a glimpse as to what may occur if seen in real life. In the future, a second part of the project will be added to determine the distance of the gravitational wave detector from the black holes, and the time the signal reached the detector.&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=starryOrbit2.gif&amp;amp;userId=1381443&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=diffcalc1.jpg&amp;amp;userId=1381443&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=diffcalc2.jpg&amp;amp;userId=1381443&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2019-07-11at7.54.41PM.png&amp;amp;userId=1381443&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2019-07-11at7.55.20PM.png&amp;amp;userId=1381443&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=graphorbit.jpg&amp;amp;userId=1381443&#xD;
  [7]: https://community.wolfram.com//c/portal/getImageAttachment?filename=starryorbit.jpg&amp;amp;userId=1381443</description>
    <dc:creator>Macy Maurer Levin</dc:creator>
    <dc:date>2019-07-11T23:43:51Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/882068">
    <title>Re-creating Galileo&amp;#039;s Observations of Jupiter&amp;#039;s 4 Large Moons</title>
    <link>https://community.wolfram.com/groups/-/m/t/882068</link>
    <description>Awhile back, Stephen Wolfram suggested that I try to re-create, using modern calculations instead of observations, Galileo&amp;#039;s observations of Jupiter&amp;#039;s 4 largest moons. I thought I&amp;#039;d share the results here for fun, especially since its nice of have something about Jupiter given the arrival of the [Juno spacecraft][1] at Jupiter this past weekend. These moons are also known today as the [Galilean Satellites][2]. At the time, the prevailing view of the cosmos was that Earth was the center of the universe and everything moved around it. So, it came as a surprise when Galileo observed Jupiter through his primitive telescope that Jupiter has 4 &amp;#034;stars&amp;#034; that appeared to be orbiting it. In his diagrams, Jupiter was represented as a simple circle, and the new satellites as star-like figures.&#xD;
&#xD;
![Illustrations of Galileo&amp;#039;s observations of Jupiter in early 1610 from his publication Sidereus Nuncius][3]&#xD;
&#xD;
Using Astronomical Algorithms, by Jean Meeus, as a source, I used the low accuracy method (since we just need the results to look okay to the eye) to compute the positions of Jupiter&amp;#039;s 4 big moons in 2D. Higher accuracy methods are also provided in the source, but those are used for things like transits, eclipses, etc. and is more than what is needed here.&#xD;
&#xD;
    JovianMoonCoordinates[jd_] := &#xD;
     Module[{A, B, d, DE, Delta, DS, du1, du2, du3, du4, G, H, J, KK, &#xD;
       lambda, M, NN, psi, r, R, r1, r2, r3, r4, u1, u2, u3, u4, V, w1, &#xD;
       w2}, d = jd - 2451545;&#xD;
      V = 3.0148817498 + 0.000019475780 d;&#xD;
      M = 6.2400582213 + 0.017201970 d;&#xD;
      NN = 0.349414916249264 + 0.0014501120450072 d + &#xD;
        0.00574213323906134 Sin[V];&#xD;
      J = 1.15392443495605 + 0.0157519089131849 d - &#xD;
        0.005742133239061344 Sin[V];&#xD;
      A = 0.033423055175691 Sin[M] + 0.00034906585039886 Sin[2 M];&#xD;
      B = 0.096953039948 Sin[NN] + 0.0029321531433504 Sin[2 NN];&#xD;
      KK = J + A - B;&#xD;
      R = 1.00014 - .01671 Cos[M] - .00014 Cos[2 M];&#xD;
      r = 5.20872 - .25208 Cos[NN] - .00611 Cos[2 NN];&#xD;
      Delta = Sqrt[r^2 + R^2 - 2 r R Cos[KK]];&#xD;
      psi = ArcSin[R/Delta Sin[KK]];&#xD;
      w1 = 3.68229565585763 + 15.3207952882387 d - &#xD;
        0.088559510336640 Delta + psi - B;&#xD;
      w2 = 3.26777995850898 + 15.18762666631161 d - &#xD;
        0.087789749516252 Delta + psi - B;&#xD;
      lambda = &#xD;
       0.599520598060052 + 0.001450211528774608 d + &#xD;
        0.005742133239061344 Sin[V] + B;&#xD;
      DS = 0.0544542726622230 Sin[0.7470009198535 + lambda];&#xD;
      DE = DS - &#xD;
        0.02268928027592 (r - Delta)/Delta Sin[&#xD;
          lambda - 1.754055898254301] - &#xD;
        0.03874630939427 Sin[psi] Cos[lambda + 0.383972435438752];&#xD;
      u1 = 2.858969742485099 + 3.5501020551357 d - &#xD;
        0.0205208211279524 Delta + psi - B;&#xD;
      u2 = 6.25550438524295 + 1.767872509298387 d - &#xD;
        0.01021891623871900 Delta + psi - B;&#xD;
      u3 = 0.0997909453120277 + 0.876757737252356 d - &#xD;
        0.0050679637991465 Delta + psi - B;&#xD;
      u4 = 3.923660728774436 + 0.3750360006026911 d - &#xD;
        0.00216783815377278 Delta + psi - B;&#xD;
      G = 5.780181416754821 + 0.878083559165341 d - &#xD;
        0.00507562750962625 Delta;&#xD;
      H = 1.526290430869041 + 0.37645409807322 d - &#xD;
        0.002176035248978202 Delta;&#xD;
      du1 = 0.00825540736193317 Sin[2 (u1 - u2)];&#xD;
      du2 = 0.0185877565337396 Sin[2 (u2 - u3)];&#xD;
      du3 = 0.002879793265790643 Sin[G];&#xD;
      du4 = 0.01471312559431219 Sin[H];&#xD;
      r1 = 5.9057 - .0244 Cos[2 (u1 - u2)];&#xD;
      r2 = 9.3966 - .0882 Cos[2 (u2 - u3)];&#xD;
      r3 = 14.9883 - .0216 Cos[G];&#xD;
      r4 = 26.3627 - .1939 Cos[H];&#xD;
      u1 += du1;&#xD;
      u2 += du2;&#xD;
      u3 += du3;&#xD;
      u4 += du4;&#xD;
      MapThread[{# Sin[#2], -# Cos[#2] Sin[DE]} &amp;amp;, {{r1, r2, r3, r4}, {u1,&#xD;
          u2, u3, u4}}, 1]]&#xD;
&#xD;
I created a star symbol to represent the moons using the following:&#xD;
&#xD;
    star[{x_, y_}] := &#xD;
     Line[{{{-.75/2 + x, -.75/2 + y}, {.75/2 + x, .75/2 + y}}, {{-.75/2 + &#xD;
          x, .75/2 + y}, {.75/2 + x, -.75/2 + y}}, {{x, &#xD;
         1/2 + y}, {x, -1/2 + y}}}]&#xD;
&#xD;
Finally, the pieces are assembled to create an individual &amp;#034;frame&amp;#034; here:&#xD;
&#xD;
    JupiterSatellites[date_] := Module[{jd = JulianDate[date]},&#xD;
      Graphics[{GrayLevel[.6], {{Black, star[#]}} &amp;amp; /@ &#xD;
         JovianMoonCoordinates[jd]}, ImageSize -&amp;gt; 400, &#xD;
       PlotRange -&amp;gt; {{-25, 25}, {-1, 1}}, PlotRangePadding -&amp;gt; 3, &#xD;
       Epilog -&amp;gt; {White, EdgeForm[Black], Thickness[.003], &#xD;
         Disk[{0, 0}, {1, 1/1.071}]}, &#xD;
       PlotLabel -&amp;gt; &#xD;
        Block[{$DateStringFormat = {&amp;#034;MonthNameShort&amp;#034;, &amp;#034; &amp;#034;, &amp;#034;DayShort&amp;#034;, &#xD;
            &amp;#034; &amp;#034;, &amp;#034;Year&amp;#034;, &amp;#034; &amp;#034;, &amp;#034;Hour12Short&amp;#034;, &amp;#034;:&amp;#034;, &amp;#034;Minute&amp;#034;, &amp;#034;AMPM&amp;#034;}}, &#xD;
         DateString[date]]]]&#xD;
&#xD;
A sequence of frames is easily created with a simple Table command:&#xD;
&#xD;
    frames = Table[&#xD;
      JupiterSatellites[&#xD;
       DateObject[{1610, 1, 8, h, 0, 0}, TimeZone -&amp;gt; 1]], {h, 0, 120, 3}];&#xD;
&#xD;
And you can view this list of frames as a stacked diagram as follows:&#xD;
&#xD;
    Grid[List/@frames, Dividers -&amp;gt; All]&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
You can also export the frames as an animation to see the positions change in time.&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
&#xD;
  [1]: http://www.wolframalpha.com/input/?i=Juno%20spacecraft&#xD;
  [2]: http://www.wolframalpha.com/input/?i=Galilean%20Satellites&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Medicean_Stars.png&amp;amp;userId=25355&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=GalileanSatellitesGrid.png&amp;amp;userId=25355&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=8411GalileanSatellites.gif&amp;amp;userId=25355</description>
    <dc:creator>Jeffrey Bryant</dc:creator>
    <dc:date>2016-07-05T20:43:29Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3438819">
    <title>The stochastic mechanics of Hawking radiation</title>
    <link>https://community.wolfram.com/groups/-/m/t/3438819</link>
    <description>![The stochastic mechanics of Hawking radiation.  Black hole evaporation, thermal systems.][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Main23042025.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/9564cd48-8766-4446-8328-eadd5766e28f</description>
    <dc:creator>Noah MacKay</dc:creator>
    <dc:date>2025-04-03T13:37:23Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2222977">
    <title>Deep fields: pixel sorting Hubble images of deep space</title>
    <link>https://community.wolfram.com/groups/-/m/t/2222977</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [Original]: https://www.wolframcloud.com/obj/8a8fbd01-b0d8-4798-beec-166e0898b2b1&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/5d2efdc4-f66c-486b-9f5a-298d70381d5d</description>
    <dc:creator>Jack Madden</dc:creator>
    <dc:date>2021-03-18T17:28:29Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1731612">
    <title>[WSC19] Patterns in N-Body Simulations: Analysis of the Three Body Problem</title>
    <link>https://community.wolfram.com/groups/-/m/t/1731612</link>
    <description>&amp;lt;img src=&amp;#034;https://community.wolfram.com//c/portal/getImageAttachment?filename=ThreeBody.gif&amp;amp;userId=1682328&amp;#034;/&amp;gt;&#xD;
&#xD;
# Abstract&#xD;
&#xD;
In this project, I analyze n-body simulations outputs and their patterns by utilizing different statistical methods, visualization algorithms, and feature extraction techniques. Using an n-body simulation random generation technique, a sample of 5000 different outputs could be generated. By performing feature extraction processes, some interesting visualizations about the different outcomes from the simulations were plotted on a two-dimensional feature space plot. Additional conclusions were made using the distribution of the center-of-mass, and a two-body mass visualization.&#xD;
&#xD;
# Introduction&#xD;
&#xD;
In physics and astronomy, an N-body simulation is a simulation of a dynamical system of particles, usually under the influence of physical forces, such as gravity. Currently, computing power is sufficient for processing some classes of N-Body simulations, with a small number of bodies, and with a short lapse time. For cases of realistic units such as astronomical units and gigayears, computers can&amp;#039;t handle their complexity. A way to prevent this computational complexity difficulty, systems such as &amp;#034;InverseSquare&amp;#034; relativistically treat metric units and unitless quantities mathematically equivalent.&#xD;
&#xD;
Here are some cases of random n-body simulations, they have an extraordinarily chaotic behavior, and are vulnerable to having their outputs changed with just a few tweaks on their initial states.&#xD;
&#xD;
    CreateRandomBody[] := Block[{},&#xD;
    	&amp;lt;|&amp;#034;Mass&amp;#034; -&amp;gt; RandomReal[{0.01, 0.99}], &amp;#034;Position&amp;#034; -&amp;gt; RandomReal[{-1, 1}, 2], &amp;#034;Velocity&amp;#034; -&amp;gt; RandomReal[{-1, 1}, 2]|&amp;gt;&#xD;
    ]&#xD;
&#xD;
    CreateRandomPivot[] := Block[{},&#xD;
    	&amp;lt;|&amp;#034;Mass&amp;#034; -&amp;gt; 1, &amp;#034;Position&amp;#034; -&amp;gt; {0, 0}, &amp;#034;Velocity&amp;#034; -&amp;gt; RandomReal[{-0.25, 0.25}, 2]|&amp;gt;&#xD;
    ]&#xD;
&#xD;
    NBodyPlot[data_] := ParametricPlot[Evaluate[data[All, &amp;#034;Position&amp;#034;, t]],{t, 0, data[&amp;#034;SimulationTime&amp;#034;]}, AspectRatio -&amp;gt; Automatic, Axes -&amp;gt; False, PlotStyle -&amp;gt; {Thickness[0.025], Thickness[0.025], Thickness[0.025]}]&#xD;
&#xD;
    Table[Rasterize[&#xD;
       NBodyPlot[&#xD;
        NBodySimulation[&#xD;
         &amp;#034;InverseSquare&amp;#034;, {CreateRandomPivot[], CreateRandomBody[],&#xD;
          CreateRandomBody[]}, 10]], ImageSize -&amp;gt; Small], 8] // Quiet&#xD;
&#xD;
&amp;lt;img src=&amp;#034;https://community.wolfram.com//c/portal/getImageAttachment?filename=Selection_222.png&amp;amp;userId=1682328&amp;#034; /&amp;gt;&#xD;
&#xD;
For performing the same visualizations and procedures, download the notebook available on this post. The notebook contains all the datasets and files you will need.&#xD;
&#xD;
    HeuristicData = &amp;#034;...&amp;#034;;&#xD;
    NBParameters = &amp;#034;...&amp;#034;;&#xD;
    NBDPaths = &amp;#034;...&amp;#034;;&#xD;
&#xD;
The &amp;#034;HeuristicData&amp;#034; list contains lists of the heuristic results generated by the &amp;#034;NBodyHeuristics&amp;#034; function (see &amp;#034;Data Generation Procedure&amp;#034;), the &amp;#034;NBParameters&amp;#034; list contains lists of initial parameters, and the &amp;#034;NBDPaths&amp;#034; list contains lists of the final paths of the bodies. Every list is uniform and contains 5000 elements each.&#xD;
&#xD;
    NBParametersDataset = Dataset@NBParameters;&#xD;
&#xD;
    {NBPBodyA, NBPBodyB, NBPBodyC} = Table[NBParametersDataset[[All, t]], {t, 1, 3}];&#xD;
&#xD;
    {allDoubleFalse, allSingleFalse, pivotDiverged, allContained, allDivergent} =&#xD;
    	Table[Join@@Position[HeuristicData, t], {t, {&#xD;
    		{False, True, False} | {False, False, True} | {True, False, False}, {False, True, True} | {True, False, True} | {True, True, False}, {False, True, True}, {True, True, True}, {False, False, False}&#xD;
    		}}];&#xD;
&#xD;
    {allDoubleFalsePoints, allSingleFalsePoints, allContainedPoints, allDivergentPoints, pivotDivergedPoints} = &#xD;
    	Table[Thread[{Normal[NBPBodyB[x, &amp;#034;Mass&amp;#034;]], Normal[NBPBodyC[x, &amp;#034;Mass&amp;#034;]]}], {x, {allDoubleFalse, allSingleFalse, allContained, allDivergent, pivotDiverged}}];&#xD;
&#xD;
    ListPlot[{allContainedPoints, allDivergentPoints, pivotDivergedPoints, allDoubleFalsePoints},PlotStyle -&amp;gt; {RGBColor[0.9, 0.9, 0.9], {PointSize[0.01], Blue}, {PointSize[0.01], Red}, {PointSize[0.01], Orange}}, AspectRatio -&amp;gt; Automatic, PlotTheme -&amp;gt; &amp;#034;Detailed&amp;#034;, PlotLegends -&amp;gt; {&amp;#034;All Bodies Contained&amp;#034;, &amp;#034;All Bodies Diverged&amp;#034;, &amp;#034;Pivot Diverged&amp;#034;, &amp;#034;Two Bodies Diverged&amp;#034;}, PlotLabel -&amp;gt; &amp;#034;Masses of the Lightest Objects and Stability&amp;#034;, LabelStyle -&amp;gt; {16, GrayLevel[0]}, ImageSize -&amp;gt; {500, 500}]&#xD;
&#xD;
&amp;lt;img src=&amp;#034;https://community.wolfram.com//c/portal/getImageAttachment?filename=ScatterPlot.png&amp;amp;userId=1682328&amp;#034; /&amp;gt;&#xD;
&#xD;
With this plot, we can visualize that there&amp;#039;s is a correlation between the lighter bodies masses and the stability of the systems. The lightest bodies have the most stability in their simulations, which means that they are not &amp;#034;catapulted&amp;#034; from the system.&#xD;
&#xD;
Now, let&amp;#039;s calculate the distances between the center of masses using $\frac{\sum _{i=j}^n m_i x_i}{\sum _{i=j}^n m_i}$ as $m_i$ being the mass of the individual bodies and  $x_i$ as the positions in space.&#xD;
&#xD;
    centerOfMass = Thread[{Normal@NBParametersDataset[[All, All, &amp;#034;Mass&amp;#034;]], NBDPaths}];&#xD;
    &#xD;
    centerOfMasses = Table[(centerOfMass[[n]][[1]]*centerOfMass[[n]][[2]] // Total)/Total[centerOfMass[[n, 1]]], {n, 1, Length[NBParametersDataset]}];&#xD;
&#xD;
    distancesCOM = MapThread[Table[EuclideanDistance[#1, #2[[n]]], {n, 1, 3}] &amp;amp;, {centerOfMasses, NBDPaths}];&#xD;
&#xD;
    Histogram[Flatten@distancesCOM, PlotLabel -&amp;gt; &amp;#034;Sum of Distances from the Center of Mass to the Bodies [Unitless]&amp;#034;, LabelStyle -&amp;gt; {16, GrayLevel[0]},&#xD;
    PlotTheme -&amp;gt; &amp;#034;Detailed&amp;#034;, ColorFunction -&amp;gt; Function[{height}, RGBColor[0, 1 * height, 1]], ImageSize -&amp;gt; {750, 500}]&#xD;
&#xD;
&amp;lt;img src=&amp;#034;https://community.wolfram.com//c/portal/getImageAttachment?filename=Histogram_A.png&amp;amp;userId=1682328&amp;#034; /&amp;gt;&#xD;
&#xD;
This histogram clearly shows that there&amp;#039;s a logarithmic curve of the distances from the center of mass and the objects, in fact, a **LogNormalDistribution[]** distribution can be matched using **FindDistribution[]**.&#xD;
&#xD;
And, by plotting the histogram with a logarithmic scale, we obtain a normal distribution.&#xD;
&#xD;
    Histogram[Flatten@distancesCOM, {&amp;#034;Log&amp;#034;, 20},&#xD;
     PlotLabel -&amp;gt;&#xD;
      &amp;#034;Sum of Distances from the Center of Mass to the Bodies \&#xD;
    [Logarithmically Scaled, Unitless]&amp;#034;, LabelStyle -&amp;gt; {16, GrayLevel[0]},&#xD;
      PlotTheme -&amp;gt; &amp;#034;Detailed&amp;#034;,&#xD;
     ColorFunction -&amp;gt; Function[{height}, RGBColor[0, 1*height, 1]],&#xD;
     ImageSize -&amp;gt; {850, 500}]&#xD;
&#xD;
&amp;lt;img src=&amp;#034;https://community.wolfram.com//c/portal/getImageAttachment?filename=Histogram_B.png&amp;amp;userId=1682328&amp;#034;&amp;gt;&#xD;
&#xD;
One fascinating visualization is to FeatureSpacePlot all the rasterizations of the simulations. This should give us an interesting view of the bigger picture of the simulations.&#xD;
&#xD;
    rasterizeList = Rasterize[NBodyPlot[NBodySimulation[&amp;#034;InverseSquare&amp;#034;, #, 10]]] &amp;amp;/@ Normal[RandomSample[NBParametersDataset, 250]] // Quiet;&#xD;
    &#xD;
    FeatureSpacePlot[rasterizeList[[1;;200]], LabelingSize -&amp;gt; 30, ImageSize -&amp;gt; {800, 800}, PlotLabel -&amp;gt; &amp;#034;Feature Space of 250 Three Body Simulations&amp;#034;, LabelStyle -&amp;gt; {16, GrayLevel[0]}]&#xD;
    &#xD;
&amp;lt;img src=&amp;#034;https://community.wolfram.com//c/portal/getImageAttachment?filename=FeatureSpacePlot.png&amp;amp;userId=1682328&amp;#034;&amp;gt;&#xD;
&#xD;
Based on this **FeatureSpacePlot[]**, we can infer that the most caotic simulations are located in the borders, and the divergent simulations are always on the side of where is the body diverging.&#xD;
&#xD;
# Conclusion&#xD;
&#xD;
In this project, I conclude that the applicability of algorithms such as neural networks and clustering classification is hard due to the chaotic nature of the n-body simulations, the volatility of such systems do not allow such thing as classification. Some inference could be achieved in the graphics and distributions, such as stability in lower masses, and the close center of mass from the systems.&#xD;
&#xD;
An interesting expansion to research is to produce the same analysis on larger systems, such as a five body problem. In a more robust computer, more simulations can be done, and clearer correlations and curves should be likely to conceive.&#xD;
&#xD;
# [Optional] How to Generate the Data&#xD;
For generating all the data used in this project, these cells can be executed, note that this section is an appendix, and not necessary since 5000 sample data are already included in this post notebook.&#xD;
&#xD;
    batchPath = NotebookDirectory[]&#xD;
&#xD;
    {generatedData, heuristicData, nbdpathsData, bodyData, bodiesData} = Table[{}, {5}];&#xD;
&#xD;
    NBodyHeuristics[positionsList_,maxSpace_:8] := Block[{&#xD;
      emptyList = {},&#xD;
      bodyA = positionsList[[1]],&#xD;
      bodyB = positionsList[[2]],&#xD;
      bodyC = positionsList[[3]]&#xD;
    },&#xD;
      If[maxSpace &amp;gt;= bodyA[[1]] &amp;gt;= -maxSpace \[And] maxSpace &amp;gt;= bodyA[[2]] &amp;gt;= -maxSpace,&#xD;
        emptyList = Join[emptyList, {True}],&#xD;
        emptyList = Join[emptyList, {False}]&#xD;
      ];&#xD;
      If[maxSpace &amp;gt;= bodyB[[1]] &amp;gt;= -maxSpace \[And] maxSpace &amp;gt;= bodyB[[2]] &amp;gt;= -maxSpace,&#xD;
        emptyList = Join[emptyList, {True}],&#xD;
        emptyList = Join[emptyList, {False}]&#xD;
      ];&#xD;
      If[maxSpace &amp;gt;= bodyC[[1]] &amp;gt;= -maxSpace \[And] maxSpace &amp;gt;= bodyC[[2]] &amp;gt;= -maxSpace,&#xD;
        emptyList = Join[emptyList, {True}],&#xD;
        emptyList = Join[emptyList, {False}]&#xD;
      ];&#xD;
      Return[emptyList];&#xD;
    ]&#xD;
&#xD;
    GenerateNBodySimulations[nsimulations_,time_] := Do[AbortProtect[&#xD;
    	PrintTemporary[Style[&amp;#034;\[DoubleRightArrow]&amp;#034;, 15, Orange], &amp;#034; &amp;#034;,&#xD;
    		&amp;#034;Generated &amp;#034;, Dynamic[Length[heuristicData]], &amp;#034; &amp;#034;, Style[&amp;#034;NBodySimulations&amp;#034;, Orange], &amp;#034; &amp;#034;,&#xD;
    		ProgressIndicator[Appearance -&amp;gt; &amp;#034;Percolate&amp;#034;, ImageSize -&amp;gt; {60, 20}]&#xD;
    	];&#xD;
    	bodyData = {CreateRandomPivot[], CreateRandomBody[], CreateRandomBody[]};&#xD;
    	generatedData = NBodySimulation[&amp;#034;InverseSquare&amp;#034;, bodyData, time] // Quiet;&#xD;
    	heuristicData = Append[heuristicData, NBodyHeuristics[generatedData[All, &amp;#034;Position&amp;#034;, generatedData[&amp;#034;SimulationTime&amp;#034;]]]];nbdpathsData = Append[nbdpathsData, generatedData[All, &amp;#034;Position&amp;#034;, generatedData[&amp;#034;SimulationTime&amp;#034;]]]];bodiesData = Append[bodiesData, bodyData];&#xD;
    	ClearAll[generatedData, bodyData],&#xD;
    	nsimulations&#xD;
    ];&#xD;
&#xD;
    GenerateNBodySimulations[100, 10]&#xD;
&#xD;
    Export[batchPath &amp;lt;&amp;gt; &amp;#034;HeuristicData_&amp;#034; &amp;lt;&amp;gt; ToString[batchCounter] &amp;lt;&amp;gt; &amp;#034;.mx&amp;#034;, heuristicData];&#xD;
    Export[batchPath &amp;lt;&amp;gt; &amp;#034;NBDPaths_&amp;#034; &amp;lt;&amp;gt; ToString[batchCounter] &amp;lt;&amp;gt; &amp;#034;.mx&amp;#034;, nbdpathsData];&#xD;
    Export[batchPath &amp;lt;&amp;gt; &amp;#034;NBParameters_&amp;#034; &amp;lt;&amp;gt; ToString[batchCounter] &amp;lt;&amp;gt; &amp;#034;.mx&amp;#034;, bodiesData];&#xD;
    {generatedData,heuristicData,nbdpathsData,bodyData,bodiesData}=Table[{},{5}];&#xD;
    batchCounter++;</description>
    <dc:creator>Pedro Cabral</dc:creator>
    <dc:date>2019-07-11T16:26:10Z</dc:date>
  </item>
</rdf:RDF>

