Gegeven een reeks punten in het $$xy$$-vlak, en twee cirkels $$C_0$$ en $$C_1$$. Cirkel $$C_0$$ heeft als middelpunt $$(x_0, y_0)$$ en als straal $$R_0$$. Analoog is $$(x_1, y_1)$$ de coördinaat van het middelpunt van $$C_1$$, en is $$R_1$$ de straal van $$C_1$$. Het is de bedoeling om voor elk van de gegeven punten te bepalen bij welke cirkel dit punt het dichtst ligt.
De afstand van een punt tot een cirkel is hierbij gedefinieerd als de afstand van dit punt tot het dichtste punt op die cirkel.
M.a.w. voor een punt met coördinaat $$(x, y)$$ is de afstand tot de cirkel met middelpunt $$(x_M, y_M)$$ en straal $$R$$ gegeven
door
$$
d = |\sqrt{(x-x_M)^2 + (y-y_M)^2} - R|
$$
Schrijf de gevectoriseerde functie passende_cirkel()
met als argumenten:
x
die de $$x$$-coördinaten van de na te kijken punten bevat y
die de $$y$$-coördinaten van de na te kijken punten bevat x_0
, namelijk de $$x$$-coördinaat van het middelpunt van de cirkel $$C_0$$y_0
, namelijk de $$y$$-coördinaat van het middelpunt van de cirkel $$C_0$$R_0
, namelijk de straal-coördinaat van de cirkel $$C_0$$, je mag aannemen dat $$R_0 > 0$$x_1
, namelijk de $$x$$-coördinaat van het middelpunt van de cirkel $$C_1$$y_1
, namelijk de $$y$$-coördinaat van het middelpunt van de cirkel $$C_1$$R_1
, namelijk de straal-coördinaat van de cirkel $$C_1$$, je mag aannemen dat $$R_1 > 0$$x
en y
compatibel zijn. Dit betekent dat ze ofwel beide van het type float
zijn, ofwel beide een NumPy-rij zijn (en in dit geval van gelijke lengte zijn, en minstens 1 getal bevatten).
Het resultaat van deze functie is:
x
en y
van het type float
zijn: een geheel getal 1 als de afstand tot $$C_1$$ strikt kleiner is
dan de afstand tot $$C_0$$ van het desbestreffende punt met coördinaat $$(x,y)$$x
en y
van het type NumPy-rij zijn: een NumPy-rij die even lang is als de NumPy-rijen x
en y
.
Deze resultaatrij bevat enkel de getallen 1 en 0. Het getal op positie $$i$$ in deze resultaatrij is 1 indien de afstand van het punt met coördinaat $$(x_i, y_i)$$
tot de cirkel $$C_1$$ strikt kleiner is dan de afstand tot de cirkel $$C_0$$. (Hierin stelt $$x_i$$, resp. $$y_i$$ het element met rangnummer $$i$$ uit de
rij x
resp. y
voor.),
TIP: een boolean
kan je naar een int
omzetten door met de gehele waarde 1
te vermenigvuldigen. Zo levert
de uitdrukking (a == b)*1
de waarde 1
indien a
en b
gelijk zijn, en de waarde
0
in het andere geval.
x = np.array([1.0, 2.0, 1.0, 0.0]) y = np.array([1.0, 2.0, 0.0, 2.0]) print(passende_cirkel(x, y, 0.0, 0.0, 1.0, 1.0, 1.0, 2.0)) = [0 1 0 1] print(passende_cirkel(0.0, 2.0, 0.0, 0.0, 1.0, 1.0, 1.0, 2.0)) = 1