-
Notifications
You must be signed in to change notification settings - Fork 0
/
area_cli.py
70 lines (53 loc) · 1.64 KB
/
area_cli.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# %%
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import argparse
def dist(row, origem):
p1 = np.array([row["x"], row["y"]])
p2 = np.array(origem)
return np.linalg.norm(p1 - p2)
def plot(df):
df[df["flag_circunferencia"]].plot.scatter(x="x", y="y")
plt.show()
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
"--diametro",
"-d",
default=10,
type=int,
help="Tamanho do diâmetro da circunferência.",
)
parser.add_argument(
"--samples",
"-s",
default=100,
type=int,
help="Quantidade de amostras criadas para inferir a área",
)
parser.add_argument(
"--plot",
"-p",
action="store_true",
help="Quando invocado, realiza o plot do gráfico da circunferência",
)
args = parser.parse_args()
n = args.samples
diametro = args.diametro
raio = diametro / 2
origem = diametro / 2, diametro / 2
points = np.random.uniform(low=0, high=10, size=[n, 2])
df = pd.DataFrame(points, columns=["x", "y"])
df["dist_origem"] = df.apply(dist, args=(origem,), axis=1)
df["flag_circunferencia"] = df["dist_origem"] <= raio
area_quadrado = diametro * diametro
area_circunferencia_aprox = area_quadrado * df["flag_circunferencia"].mean()
print(f"Tamanho da amostra: {n}")
print("Área Quadrado (Exata):", area_quadrado)
print("Área Circunferência (Aprox.):", area_circunferencia_aprox)
print("Área Circunferência (Exata):", np.pi * (raio**2))
if args.plot:
plot(df)
if __name__ == "__main__":
main()