Does a tangent plane touch a sphere at more than one point?
The simulation was realised with POV-Ray.
https://povray.org
The POV-Ray model is reported below and is released free for any use. The values of the variables that change dynamically during the simulation are given in the video in real-time for each individual frame.
//################# POV-Ray model file start ##################
#include "colors.inc"
// Units
#declare Km = 1; // kilometers units
#declare M = Km / 1000; // meters units
#declare Mi = 1609.344 * M; // miles unit
#declare Ft = Mi / 5280; // feet unit
#declare Yd = Mi / 1760; // yards unit
#declare NM = 1.852 * Km; // nautical miles unit
// Earth
#declare EarthRadius = 6371 * Km;
#declare EarthCheckerSquares = 4;
#declare CubeCheckerSquares = 4;
// Observer
#declare ObserverDist = 45000 * Km;
#declare ObserverAngle = 0 * Km;
#declare ObserverX = 0 * Km;
#declare ObserverY = 0 * Km;
#declare ZoomX = 1;
#declare ZoomY = 1;
#declare LookAtOrigin = 1;
// Reference point
#declare RefPointX = EarthRadius / CubeCheckerSquares;
#declare Rnd_1 = seed (1153);
// Derived variables
#declare EarthCenter = <0, -EarthRadius, 0>;
#declare ObserverAngleRad = ObserverAngle * 2 * pi / 360;
#declare ObserverPos = ObserverDist * <sin(ObserverAngleRad), 0, cos(ObserverAngleRad)> + <ObserverX, ObserverY, 0>;
#declare squaressize = function(Squares) { EarthRadius * 2 / Squares }
#declare EarthCheckerSquaresSize = squaressize(EarthCheckerSquares);
#declare CubeCheckerSquaresSize = squaressize(CubeCheckerSquares);
global_settings {
ambient_light White * 10
}
camera {
location ObserverPos
look_at (1 - LookAtOrigin) * (ObserverPos + <0, 0, -1 * M>)
right 4/3 * x / ZoomX
up 3/4 * y / ZoomY
}
// Half Earth
intersection {
sphere {
<0, 0, 0>, EarthRadius
rotate <0, 0, 90>
rotate <-90, 0, 0>
translate EarthCenter
}
box {
<-1, -1, -1> * EarthRadius * 4,
<1, 1, 0> * EarthRadius * 4
}
texture {
pigment {
checker Gray * 0.5, White
scale <EarthCheckerSquaresSize, EarthCheckerSquaresSize, EarthRadius * 4>
translate <0, 0, -EarthRadius * 2>
}
}
}
// Half cube
box {
<-1, 0, -1> * EarthRadius,
<1, 2, 0> * EarthRadius
texture {
pigment {
checker Blue * 0.5, Yellow
scale <CubeCheckerSquaresSize, CubeCheckerSquaresSize, EarthRadius * 4>
translate <0, 0, -EarthRadius * 2>
}
}
}
// intersection point
sphere {
<0, 0, 0>, 1
texture {
pigment {
color rgbf<1, 0, 0, 1>
}
}
scale <1, 1, 1> * ObserverDist / 100
scale <1 / ZoomX, 1 / ZoomY, 1>
}
// reference point
sphere {
<0, 0, 0>, 1
texture {
pigment {
color rgbf<0, 1, 0, 1>
}
}
scale <1, 1, 1> * ObserverDist / 100
scale <1 / ZoomX, 1 / ZoomY, 1>
translate <RefPointX, - EarthRadius + sqrt(pow(EarthRadius,2) - pow(RefPointX,2)), 0>
}
//################# POV-Ray model file end ##################
Информация по комментариям в разработке