def LocGeomH():
def ortocentru(zA, zB, zC):
a = C.rho(zB - zC)
b = C.rho(zA - zC)
c = C.rho(zB - zA)
alph = (a ** 2) * ((b ** 2) + (c ** 2) - (a ** 2))
beth = (b ** 2) * ((a ** 2) + (c ** 2) - (b ** 2))
gamm = (c ** 2) * ((a ** 2) + (b ** 2) - (c ** 2))
zH = (alph*zA+beth*zB+gamm*zC)/(alph+beth+gamm)
return zH
C.setXminXmaxYminYmax(-10, 10, -12, 8)
q = 0
R = 6
nrPuncte = 720
delta = 2 * math.pi / nrPuncte
nB = nrPuncte // 2 + nrPuncte // 15
nC = nrPuncte - nrPuncte // 15
zB = C.fromRhoTheta(R, nB * delta)
zC = C.fromRhoTheta(R, nC * delta)
lista=[]#
listasim=[]
for n in range(10 * nrPuncte):
if n % nrPuncte == nB or n % nrPuncte == nC:
continue
C.fillScreen(Color.White)
C.setNgon(unCercQR(q, R, nrPuncte), Color.Navy)
zA = C.fromRhoTheta(R, n * delta)
C.drawNgon([zA, zB, zC], Color.Navy)
zH = ortocentru(zA, zB, zC)
lista.append(zH)
listasim.append(zH*(-1))
C.drawNgon([zA, zH, zB, zH, zC, zH], Color.Green)
for i in lista:
C.setPixel(i,Color.Red)
for i in listasim:
C.setPixel(i,Color.Red)
if C.mustClose():
return
ZGVmIExvY0dlb21IKCk6CgogICAgZGVmIG9ydG9jZW50cnUoekEsIHpCLCB6Qyk6CiAgICAgICAgYSA9IEMucmhvKHpCIC0gekMpCiAgICAgICAgYiA9IEMucmhvKHpBIC0gekMpCiAgICAgICAgYyA9IEMucmhvKHpCIC0gekEpCgogICAgICAgIGFscGggPSAoYSAqKiAyKSAqICgoYiAqKiAyKSArIChjICoqIDIpIC0gKGEgKiogMikpCiAgICAgICAgYmV0aCA9IChiICoqIDIpICogKChhICoqIDIpICsgKGMgKiogMikgLSAoYiAqKiAyKSkKICAgICAgICBnYW1tID0gKGMgKiogMikgKiAoKGEgKiogMikgKyAoYiAqKiAyKSAtIChjICoqIDIpKQogICAgICAgIHpIID0gKGFscGgqekErYmV0aCp6QitnYW1tKnpDKS8oYWxwaCtiZXRoK2dhbW0pCiAgICAgICAgcmV0dXJuIHpICgogICAgQy5zZXRYbWluWG1heFltaW5ZbWF4KC0xMCwgMTAsIC0xMiwgOCkKICAgIHEgPSAwCiAgICBSID0gNgogICAgbnJQdW5jdGUgPSA3MjAKICAgIGRlbHRhID0gMiAqIG1hdGgucGkgLyBuclB1bmN0ZQogICAgbkIgPSBuclB1bmN0ZSAvLyAyICsgbnJQdW5jdGUgLy8gMTUKICAgIG5DID0gbnJQdW5jdGUgLSBuclB1bmN0ZSAvLyAxNQogICAgekIgPSBDLmZyb21SaG9UaGV0YShSLCBuQiAqIGRlbHRhKQogICAgekMgPSBDLmZyb21SaG9UaGV0YShSLCBuQyAqIGRlbHRhKQoKICAgIGxpc3RhPVtdIwogICAgbGlzdGFzaW09W10KCiAgICBmb3IgbiBpbiByYW5nZSgxMCAqIG5yUHVuY3RlKToKICAgICAgICBpZiBuICUgbnJQdW5jdGUgPT0gbkIgb3IgbiAlIG5yUHVuY3RlID09IG5DOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIEMuZmlsbFNjcmVlbihDb2xvci5XaGl0ZSkKICAgICAgICBDLnNldE5nb24odW5DZXJjUVIocSwgUiwgbnJQdW5jdGUpLCBDb2xvci5OYXZ5KQogICAgICAgIHpBID0gQy5mcm9tUmhvVGhldGEoUiwgbiAqIGRlbHRhKQogICAgICAgIEMuZHJhd05nb24oW3pBLCB6QiwgekNdLCBDb2xvci5OYXZ5KQogICAgICAgIHpIID0gb3J0b2NlbnRydSh6QSwgekIsIHpDKQogICAgICAgIGxpc3RhLmFwcGVuZCh6SCkKICAgICAgICBsaXN0YXNpbS5hcHBlbmQoekgqKC0xKSkKICAgICAgICBDLmRyYXdOZ29uKFt6QSwgekgsIHpCLCB6SCwgekMsIHpIXSwgQ29sb3IuR3JlZW4pCiAgICAgICAgZm9yIGkgaW4gbGlzdGE6CiAgICAgICAgICAgIEMuc2V0UGl4ZWwoaSxDb2xvci5SZWQpCiAgICAgICAgZm9yIGkgaW4gbGlzdGFzaW06CiAgICAgICAgICAgIEMuc2V0UGl4ZWwoaSxDb2xvci5SZWQpCgogICAgICAgIGlmIEMubXVzdENsb3NlKCk6CiAgICAgICAgICAgIHJldHVybg==