Wzajemne położenie prostej i okręgu

0

Witam Was wszystkich.

Jestem pewien, że dla wielu z was napisanie takiego programu, to pestka, ale ja mam z tym troszeczkę problemów. Nauczycielka rzuciła początkowych programistów od razu na głęboką wodę i nie tłumacząc podstaw, przeszła od razu do zadań.
Prosiłbym o pomoc w napisaniu tego programu, a także o (w miarę możliwości) tłumaczenie dlaczego tak, a nie inaczej.

Treść zadania

Napisz program, który określi wzajemne położenie prostej
y = ax + b
i okręgu
x2 + y2 = r2,

gdzie: a – współczynnik kierunku prostej;
b – współczynnik przesunięcia prostej;
r – promień okręgu.

Parametry a, b i r należy wczytać z klawiatury.

Wynikiem wykonania programu powinien być jeden z trzech tekstów:

a) Prosta przecina okrąg w dwóch punktach,
b) Prosta jest styczna do okręgu,
c) Prosta nie ma punktów wspólnych z okręgiem

oraz współrzędne punktów.

Wynik podać w następującym formacie:

Prosta przecina okrąg w dwóch punktach:

x1 = -----.-- y1 = -----.--
x2 = -----.-- y2 = -----.--

Znak "_" oznacza miejsce na jedną cyfrę.

UWAGA: Dany układ dwóch równań należy przekształcić do postaci równania kwadratowego względem zmiennej x. Następnie należy rozwiązać równanie kwadratowe. Wzajemne położenie prostej i okręgu będzie zależało od wartości d (delta). W przypadku d = 0 jest jeden punkt wspólny (prosta jest styczną do okręgu); w przypadku d > 0 prosta przecina okrąg w dwóch punktach; w przypadku d < 0 prosta i okrąg nie mają punktów wspólnych.

Póki co, maznąłem coś takiego:

/*------------------------------------------------------------------------------------------
OPIS: Drugi program w języku programowania C++
ZADANIE: Napisz program, który określi wzajemne położenie prostej i okręgu.
AUTOR: Daniel Bojarski
DATA: 03.10.2013
------------------------------------------------------------------------------------------*/

/*Zbiór bibliotek*/
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <conio.h>
/*---------------*/

using namespace std;

/*<Treść programu>*/
int main()
{
	int a, b, r, x, y, A, B, C, d;
	cout << "Podaj wartosc (a)";
	cin >> a;
	cout << "Podaj wartosc (b)";
	cin >> b;
	cout << "Podaj wartosc (r)";
	cin >> r;
	0 = x^2 + (a*x + b)^2 - r^2;  - tutaj jest błąd, ale nie wiem jak z tym iść dalej

	d = B^2 - 4*A*C;

	if (d==0) {
		cout << "Prosta jest styczna do okręgu";
	} if (d<0) {
		cout << "Prosta nie ma punktow wspolnych z okregiem";
	} if (d>0) {
		cout << "Prosta przecina okrag w dwoch punktach";
		}

	_getch();
    return 0;
}
/*</Treść programu>*/

Nie wiem zbytnio jak wyciągnąć te zmienne A, B, C.

1

W c++ operator ^ to xor bitowy, a nie potęgowanie.
Równanie musisz przekształcić
0 = x^2 + (a*x + b)^2 - r^2;
jest bez sensu

większość zmiennych nie jest zainicjalizowana

0

Doskonale wiem, co trzeba zrobić na kartce papieru, ale staję w miejscu, kiedy trzeba to wszystko napisać w sposób przyjazny dla C++. Napisałem również, że jestem początkujący - amator amatorów, który w dodatku napisał temat w dziale "Newbie", gdzie ma nadzieję, że przynajmniej tutaj nie zostanie kopnięty w d*pę, a jakoś pokierowany.

Moderatora pozostaje mi przeprosić za wcześniejszy temat w (jak teraz wnioskuję) nieodpowiednim dziale i z nieodpowiednią nazwą.

@Sopelek
Wiem, wiem, że to działanie jest bezsensowne, ale próbowałem kombinować, kombinować, aż w końcu je zostawiłem, żeby tutaj pokazać, gdzie i z czym się borykam. Wiem, że do równania delty muszę wyciągnąć 3 wartości, dla których poświęciłem 3 zmienne - A, B, C. Nie wiem jednak, jak to dokładnie zrobić. Zostawmy już ostatnią część zadania. Myślę, że sobie poradzę, jeśli tylko zrozumiem, co i jak zrobić, żeby wyliczyło mi deltę.

2

Jakie człowiek cuda wymyśla jak mu się robić nie chce...

Equation.PNG

0
Ola Nordmann napisał(a):

Jakie człowiek cuda wymyśla jak mu się robić nie chce...

Equation.PNG

Dziękuję bardzo za pomoc, ale mam pytanie dotyczące j, k, l. W jaki sposób zostały te zmienne ustalone? Skąd wiadomo, że j = a * a * 1 i tak dalej? Zostało to wyznaczone z jakiegoś wzoru? Właśnie w tym miejscu miałem problem, problem z ustaleniem tych zmiennych, dzięki którym wyliczałoby mi deltę.

1

http://www.matemaks.pl/rownania-kwadratowe.php

Równaniem kwadratowym w postaci ogólnej nazywamy równanie:
rownanie_kwadratowe_wzor_ogolny.gif

Od tego momentu.

0
Ola Nordmann napisał(a):

http://www.matemaks.pl/rownania-kwadratowe.php

Równaniem kwadratowym w postaci ogólnej nazywamy równanie:
rownanie_kwadratowe_wzor_ogolny.gif

Od tego momentu.

Cudownie ; ) Teraz wszystko rozumiem i nie powinienem mieć więcej problemów z tego typu zadaniami. Wielkie dzięki za poświęcony czas i jasne, klarowne rozpisanie wszystkich danych. Temat można zamknąć.

PS: Wydaje mi się jednak, że człowiek wymyśla cuda, kiedy chce coś zrobić, ale nie wie, jak do tego podejść ; >

EDIT: (Do notatki) Co to w ogóle za moderacja? Miałem problem z przepisaniem rozwiązania do programu w języku C++ i tyle. Takie komentarze są zbędne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1