[Edu-sig] some Unicode source: testing 1-2-3

Kirby Urner kurner at oreillyschool.com
Fri May 30 01:31:53 CEST 2014


The code below, which I've shared before in an earlier draft, is meant to
test mailman's Unicode abilities i.e. when I check the archives, is
everything intact, font-wise etc.
Thanks to two of my OST students for helping out.  I18N is to be OST's
theme at OSCON
this year so I consider this work "on the clock" as we say.

Kirby Urner
O'Reilly School of Technology

======

"""
Includes:

PlaneNets (ПлейнНэт) from Synergetics for A, B, E, T, S
Koski breakdowns of some shapes in E and S vols with phi scaling

Euler volume, modified by Gerald de Jong
http://www.grunch.net/synergetics/quadvols.html
Kirby Urner (c) MIT License

Министерство Глупых Походок
Министерство образования
"""

from math import sqrt, hypot  # sqrt: квадратный_корень

class ПлейнНэт:
    """Любой шесть край тет в шаблоне описано в API нот"""

    def __init__(self, oa, ob, oc, ab, bc, ca):
        self.oa = oa
        self.ob = ob
        self.oc = oc
        self.ab = ab
        self.bc = bc
        self.ca = ca

class Тетраэдр:
    """
    Займет шесть края тетраэдра с лицами
    (а, б, г) (б, в, д) (с, а, е) (д, д, е) - объем возвращается
    если IVM и XYZ
    """

    def __init__(self, a,b,c,d,e,f):
        self.a, self.a2 = a, a**2
        self.b, self.b2 = b, b**2
        self.c, self.c2 = c, c**2
        self.d, self.d2 = d, d**2
        self.e, self.e2 = e, e**2
        self.f, self.f2 = f, f**2

    def ivm_объем(self):
        return ((self._addopen()- self._addclosed() -
self._addopposite())/2) ** 0.5

    def xyz_объем(self):
        return sqrt(8/9) * self.ivm_volume()

    def _addopen(self):
        a2,b2,c2,d2,e2,f2 = self.a2, self.b2, self.c2, self.d2, self.e2,
self.f2
        sumval = f2*a2*b2
        sumval +=  d2 * a2 * c2
        sumval +=  a2 * b2 * e2
        sumval +=  c2 * b2 * d2
        sumval +=  e2 * c2 * a2
        sumval +=  f2 * c2 * b2
        sumval +=  e2 * d2 * a2
        sumval +=  b2 * d2 * f2
        sumval +=  b2 * e2 * f2
        sumval +=  d2 * e2 * c2
        sumval +=  a2 * f2 * e2
        sumval +=  d2 * f2 * c2
        return sumval

    def _addclosed(self):
        a2,b2,c2,d2,e2,f2 = self.a2, self.b2, self.c2, self.d2, self.e2,
self.f2
        sumval =   a2 * b2 * d2
        sumval +=  d2 * e2 * f2
        sumval +=  b2 * c2 * e2
        sumval +=  a2 * c2 * f2
        return sumval

    def _addopposite(self):
        a2,b2,c2,d2,e2,f2 = self.a2, self.b2, self.c2, self.d2, self.e2,
self.f2
        sumval =  a2 * e2 * (a2 + e2)
        sumval += b2 * f2 * (b2 + f2)
        sumval += c2 * d2 * (c2 + d2)
        return sumval


φ = sqrt(5)/2 + 0.5
D = 1.0
R = D/2

def объем(net):
    return Тетраэдр(net.oa, net.ob, net.oc, net.ab, net.bc, net.ca
).ivm_объем()

# Fig. 913.01 A Quanta Module
# http://www.rwgrayprojects.com/synergetics/s09/figs/f1301.html

a = D
EF = a * sqrt(6) / 12
EC = a * sqrt(6) / 4
ED = a * sqrt(2) / 4
FC = a * sqrt(3) / 3
CD = a/2
DF = a * sqrt(3) / 6

Amod = ПлейнНэт(EF, EC, ED, FC, CD, DF)
Avol = объем(Amod)
print("Amod volume = :", Avol)

# Fig. 916.01 B Quanta Module
# http://www.rwgrayprojects.com/synergetics/s09/figs/f1601.html

a = D
EA = a * sqrt(2) / 2
EC = a/2
EB = a * sqrt(6) / 12
AC = a/2
CB = a * sqrt(2) / 4
BA = a * sqrt(6) / 4

Bmod = ПлейнНэт(EA, EC, EB, AC, CB, BA)
Bvol = объем(Bmod)
print("Bmod volume = :", Bvol)

# Fig. 986.411A T & E Module
# http://www.rwgrayprojects.com/synergetics/s09/figs/f86411a.html

h = R
OC = h
OA = h * sqrt((5 - sqrt(5))/2)
OB = h * sqrt((9 - 3 * sqrt(5))/2 )
CA = (h/2) * (sqrt(5) - 1)
AB = h * sqrt(5 - 2 * sqrt(5))
BC = (h/2) * (3 - sqrt(5))

Emod = ПлейнНэт(OC, OA, OB, CA, AB, BC)
Evol = объем(Emod)
print("Emod volume = :", Evol)

# Fig. 986.411A T & E Module
# http://www.rwgrayprojects.com/synergetics/s09/figs/f86411a.html

h = R * pow(2/3,1/3) * (φ / sqrt(2))
OC = h
OA = h * sqrt((5 - sqrt(5))/2)
OB = h * sqrt((9 - 3 * sqrt(5))/2 )
CA = (h/2) * (sqrt(5) - 1)
AB = h * sqrt(5 - 2 * sqrt(5))
BC = (h/2) * (3 - sqrt(5))

Tmod = ПлейнНэт(OC, OA, OB, CA, AB, BC)
Tvol = объем(Tmod)
print("Tmod volume = :", Tvol)


# Fig. 988.13A S Quanta Module Edge Lengths
# http://www.rwgrayprojects.com/synergetics/s09/figs/f8813a.html

a = D
FG = (a/2) * sqrt(3) * sqrt(7-3*sqrt(5))
FE = a * sqrt(7 - 3*sqrt(5))
FH = (a/2) * (sqrt(5)-1)
GE = (a/2) * sqrt(7 - 3*sqrt(5))
EH = (a/2) * (3 - sqrt(5))
HG = (a/2) * sqrt (7 - 3*sqrt(5))

Smod = ПлейнНэт(FG, FE, FH, GE, EH, HG)
Svol = объем(Smod)
print("Smod volume = :", Svol)  # φ**=5 / 2

print("================")

sFactor = Svol / Evol

s3 = Svol * pow(φ, -3)
s6 = Svol * pow(φ, -6)
e3 = Evol * pow(φ, -3)
E3 = Evol * pow(φ, 3)
print("sFactor (Svol/Evol) =   ", sFactor)

print("================")

BUvol = (20 * sFactor ** 2)
LUvol = BUvol/8  # 60 * S + 20 * s3

print("BigUgly:                {:10.7f}".format(BUvol))
print("SuperRT:                {:10.7f}".format(120 * E3))  # ромбические
триаконтаэдра
# print("UnknownTet:             {:10.7f}".format(20 * sFactor **  1))
print("VE    (edge 2):         {:10.7f}".format(20 * sFactor **  0)) #  420
* Svol + 100 * s3
print("Icosa (edge 2):         {:10.7f}".format(20 * sFactor ** -1)) #  420
* Evol + 100 * e3
# print("BizzaroTet:             {:10.7f}".format(20 * sFactor ** -2)) #
 360 * Svol +  85 * s3
print("SmallGuy:               {:10.7f}".format(20 * sFactor ** -3)) #  360
* Evol +  85 * e3
print("RD6:                    {:10.7f}".format((2*Avol + Bvol) * 4 * 12))
print("RT5+:                   {:10.7f}".format(120 * Evol)) # ромбические
триаконтаэдра
print("RT5:                    {:10.7f}".format(120 * Tvol)) # ромбические
триаконтаэдра
print("октаэдр (edge 2):       {:10.7f}".format((Avol + Bvol) * 6 * 8)) # 6
ABs per face
print("LittleUgly + 24 Smods:  {:10.7f}".format(LUvol + 24 * Svol))
print("куб:                    {:10.7f}".format(267* s3 + 63 * s6)) #
Тетраэдр + 6 1/8 октаэдр
print("LittleUgly:             {:10.7f}".format(LUvol))
print("VE faces in LittleUgly: {:10.7f}".format(LUvol * sFactor**-2))
print("Тетраэдр:               {:10.7f}".format( 21 * Svol + 5 * s3))

import unittest

class Test_Tetrahedron(unittest.TestCase):

    def test_unit_volume(self):
        tet = Тетраэдр(D, D, D, D, D, D).ivm_объем()
        self.assertAlmostEqual(tet, 1.0)

    def test_unit_volume2(self):
        tet = Тетраэдр(R, R, R, R, R, R).xyz_объем()
        self.assertAlmostEqual(tet, 0.1178511)

    def test_phi_edge_tetra(self):
        tet = Тетраэдр(D, D, D, D, D, φ )
        self.assertAlmostEqual(tet.ivm_объем(), 0.70710678)

    def test_right_tetra(self):
        e = hypot(sqrt(3)/2, sqrt(3)/2)  # right Тетраэдр
        tet = Тетраэдр(D, D, D, D, D, e).xyz_объем()
        self.assertAlmostEqual(tet, 1.0)

    def test_smod_volume(self):
        svol = 0.5 * φ**-5
        self.assertAlmostEqual(Svol, svol)

if __name__ == "__main__":
    unittest.main()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/edu-sig/attachments/20140529/1e152b60/attachment-0001.html>


More information about the Edu-sig mailing list