H4BBQ

      ..и получили немного потусторонний ответ
      (словно разработчики живут не в нашем общем мире):
      «Возможность захватывать объекты Вашего мира в 3D
      с помощью камеры Вашего смартфона не относится
      к функциям обновления Creators Update.

      "Приложение Microsoft для 3D-захвата выйдет не скоро"
      https://3dnews.ru/949996

Маятник (Качели)
----------------

  # Swing -- a seat suspended by ropes or chains, on which
  #          someone may sit and swing back and forth.
  # Works with simutron 1.01 (tronSerialEcho.simu)
  # Simutron significantly slows down our Virtual machine,
  # So next time we are switching to real Arduinos.

  import serial
  from visual import *
  from math import *

  SCREEN = 800;
  PENLEN = 10;  # pendulum length
  BALLRA = 1.5  # ball radius
  PERSPE = PENLEN / 3
  INITDA = .013
  scene.width  = SCREEN;
  scene.height = SCREEN;

  G      = 9.81

  w = box( color=(.2,.2,.2), pos=(0,0,-2),  \
           size=( 2*PENLEN+2*BALLRA+PERSPE, \
                  2*PENLEN+2*BALLRA+PERSPE, \
                  .1                        \
           )                                \
      )
  c = cylinder( pos=(0,0,-2), axis=(0,0,1), \
                length = 4, color=color.red \
      )
  b = box( color=color.blue, size=(1,PENLEN,1))
  s = sphere( color=color.green, radius=BALLRA)

  da = INITDA # initial speed
  a = da
  dam = 1
  h = PENLEN
  c = 0
  cold = 0
  t = 0

  ser = serial.Serial('/tmp/simavr1-uart0',9600)

  while True:
      c += 1
      rate(200)
      b.axis=( cos(a), sin(a), 0)
      b.pos=( PENLEN/2 * sin(a),-PENLEN/2 * cos(a), 0)
      s.pos=( PENLEN * sin(a), -PENLEN * cos(a), 0)

      h = PENLEN * (1 - cos(a))

      tmp = INITDA*INITDA - 0.000001*G*h
      if tmp > 0:
          da = sqrt( tmp)
      else:
          dam = sign( a)

      if h < 0.001:
          if (c - cold) != 1 and c > 3:
              t = 0 if t > 255 else t + 1
              print(t)
              INITDA = 0.5 * INITDA
              if da < 0.0001:
                  INITDA = 0.014
              ser.write(bytearray([t]))
          cold = c

      a = a - da * dam

~~~~~~~~~~~~~~~~~~~~

      -- Если вселенная действительно бесконечна,
         то разве не стремимся мы к тому,
         чего невозможно достичь?

      Star Trek Beyond 2016, 0:05:17

Наклонное вращение (vpython 6.x)
--------------------------------

  from visual import *
  from math import *

  RA = 1e-5

  shape = shapes.circle( radius=2, angle1=-pi/2, angle2=pi/2)
  ex = extrusion()
  ex.shape = shape
  ex.color = color.red
  ex.up = (-1,1)

  ey = extrusion()
  ey.shape = shape
  ey.color = color.yellow
  ey.up = (-1,1)

  a = 0
  da = .1

  while True:
      rate(500)
      path = []
      for x in range(181):
          path.append( (RA*cos( (x+a)*pi/180),     \
                        RA*cos( (x+a)*pi/180),     \
                        RA*-sin( (x+a)*pi/180)))
      ex.pos = path

      path = []
      for x in range(181):
          path.append( (RA*cos( pi+(x+a)*pi/180),   \
                        RA*cos( pi+(x+a)*pi/180),   \
                        RA*-sin( pi+(x+a)*pi/180)))
      ey.pos = path

      a = 0 if a >=360 else a + da

        Мы запрограммировали этот мир так,
        чтобы никто и никогда не узнал правду.
        Но вы с Фулером узнали.
        Ты понимаешь, что это означает?

        13й этаж, 1999, 1:13:41

Двухцветные шарики как объекты Python (vpython 6.x)
---------------------------------------------------

  from visual import *
  from math import *

  RA = 1e-5

  class Ball2:
      rota = 0.
      angle = 0.
      def __init__( self, pos=(0,0,0), radius=1,          \
                    color1=(.2,.2,.2), color2=(.6,.6,.6), \
                    angle=0, da=.01                       \
          ):
          self.a = shapes.circle( radius=radius, \
                                  angle1=-pi/2,  \
                                  angle2=pi/2    \
                                )
          self.ea = extrusion()
          self.ea.shape=self.a
          self.ea.color=color1
          self.eb = extrusion()
          self.eb.shape=self.a
          self.eb.color=color2

          self.da = da
          self.position = pos
          self.angle=angle

      def snapshot( self):
              self.ea.pos = paths.arc( pos=self.position,          \
                                  radius=RA,                       \
                                  angle1=self.rota+self.angle,     \
                                  angle2=self.rota+pi+self.angle   \
                            )
              self.eb.pos = paths.arc( pos=self.position,          \
                                  radius=RA,                       \
                                  angle1=self.rota+pi+self.angle,  \
                                  angle2=self.rota+2*pi+self.angle \
                            )
              self.rota=0 if self.rota>=2*pi else self.rota+self.da

  # python-visual: something is wrong with named parameters

  bup = Ball2( pos = (0,2,0),         \
               radius = .6,           \
               color1 = color.yellow, \
               color2 = color.white   \
        )
  bup.angle = pi
  bup.da = .03

  ble = Ball2( pos=(1.5,0,0),         \
               radius = 1,            \
               color1 = color.red,    \
               color2 = color.white
        )
  ble.angle = 1

  bri = Ball2( pos=(-1.5,0,0),        \
               radius = 1.5,          \
               color2 = (.8,.5,.2)    \
        )
  bri.da = .02

  while True:
      rate(100)
      bup.snapshot()
      ble.snapshot()
      bri.snapshot()

Ссылки
------

  1. http://www.physbook.ru/index.php/Слободянюк_А.И._Физика_10/17.8
