Lage eines Kreises und einer Gerade

Bei dieser Übungsaufgabe geht es das Gleichsetzen zweier geometrischer Gleichungen.

Aufgabe:

Für eine Kreis- und eine Geradengleichung ist die Lagebeziehung (Sekante, Tangente, Passante) der beiden geometrischen Objekte zueinander zu bestimmen.

Lösung:

  • Wenn eine Gerade einen Kreis in zwei Punkten schneidet, dann ist die Gerade eine Sekante.
  • Wenn eine Gerade einen Kreis in einem Punkt berührt, dann ist die Gerade eine Tangente.
  • Wenn die Gerade und der Kreis keinen Punkt gemeinsam haben, dann ist die Gerade eine Passante.

Mit Sympy kann die Aufgabe folgendermaßen gelöst werden:

import sympy as sy

# Funktionsgleichungen als Strings einlesen:
circle_equation_input = input("Bitte die Funktionsgleichung eines Kreises \
                               eingeben (beispielsweise x**2 + y**2 = 9): ")
linear_equation_input = input("Bitte die Funktionsgleichung einer Geraden \
                               eingeben (beispielsweise 3*x - 2*y   = 4): ")

# Eingelesenen Strings in Sympy-Ausdrücke umwandeln:
circle_equation_elements = [sy.S(item) for item in \
                            circle_equation_input.replace("=", ",").split(",")]
linear_equation_elements = [sy.S(item) for item in \
                            linear_equation_input.replace("=", ",").split(",")]

# Gleichungssystem aus Sympy-Ausdrücken erstellen:
equations = [
    sy.Eq(*circle_equation_elements),
    sy.Eq(*linear_equation_elements)
]

# Gleichungssystem lösen
solutions = sy.solve(equations)

if len(solutions) == 2:
    print("Die Gerade ist eine Sekante.")
elif len(solutions) == 1:
    print("Die Gerade ist eine Tangente.")
else:
    print("Die Gerade ist eine Passante.")

Beim Erstellen des Gleichungssystems wurde bei der Übergabe der einzelnen Sympy-Elemente der Stern-Operator * vorangestellt, um nicht die Liste, sondern deren Inhalt an die Eq()-Funktion zu übergeben.