Auf die Frage, wie man die Formel in Python umsetzt... so könnte man sie repräsentieren:
Code: Alles auswählen
class Var:
def __init__(self, name): self.name = name
def __str__(self): return self.name
class Add:
def __init__(self, left, right): self.left, self.right = left, right
def __str__(self): return "(%s + %s)" % (self.left, self.right)
class Sub:
def __init__(self, left, right): self.left, self.right = left, right
def __str__(self): return "(%s - %s)" % (self.left, self.right)
class Squared:
def __init__(self, val): self.val = val
def __str__(self): return "(%s)**2" % self.val
class Eq:
def __init__(self, left, right): self.left, self.right = left, right
def __str__(self): return "%s = %s" % (self.left, self.right)
print Eq(
Sub(
Add(
Squared(Sub(Var("x"), Var("x1"))),
Squared(Sub(Var("y"), Var("y1")))),
Squared(Var("r1"))),
Sub(
Add(
Squared(Sub(Var("x"), Var("x2"))),
Squared(Sub(Var("y"), Var("y2")))),
Squared(Var("r2"))))
Die Darstellung ließe sich noch verbessern: Man kann Klammern unterdrücken, wenn der geklammerte Ausdruck nicht weniger stark bindet als der eigene Ausdruck. Außerdem könnte man die hochgestellte 2 benutzen, wenn man nicht `__str__` benutzen würde. Wie auch immer, nun könnte man ein Programm schreiben, was den Eq-Term systematisch umformt. Typisches Problem, was man gerne mal im Informatik-Studium als Teil einer KI-Vorlesung macht (jedenfalls war das bei uns noch so, als KI ein Thema war). Alternativ kann man eine Auswertungsfunktion schreiben und einfach verschiedene Werte ausprobieren, bis man die richtigen findet.
Stefan