var datasets = [
{arg:[[0, 0], [1, 0], [0, 1]], out: 0.5},
{arg:[[0, 0], [1, 0], [1, 1], [0, 1]], out: 1},
{arg:[[0,0], [2,0], [3,1], [2,2], [0,2], [1,1]], out: 4},
{arg:[[31.601669, 90.10987], [64.031362, 76.189357], [45.147682, 49.697925], [87.058644, 57.118908], [73.658353, 27.410992], [134.05109, 57.429373], [126.17374, 23.86042], [178.95235, 50.941155], [122.9789, 89.329986], [161.887, 98.664063], [124.8664, 123.08475], [92.140377, 76.356085], [60.822572, 104.06975]], out:5903.2937},
]
var names = ['vrcholy'];
function req(a, b) {
return Math.round(a * 1000) == Math.round(b * 1000);
}
function validator(result, dataset) {
return req(dataset.out, result);
}
Program dostává mnohoúhelník v rovině zapsaný jako seznam bodů. Každá dvojice sousedních bodů v seznamu je spojená úsečkou, stejně jako poslední bod s prvním. Body jsou zapsané v pořadí proti směru hodinových ručiček. Zadaný seznam obsahuje aspoň tři body.
Výstupem programu je plocha zadaného mnohoúhelníka.
Smíte používat modul numpy
.
Dostáváte hotovou funkci plocha_trojuhelnika
, která spočítá vektorový součin a vrátí polovinu jeho z-ové souřadnice.
Mnohoúhelník si potřebujeme nejdřív nakrájet na části, spočítat jejich plochu a tu sečíst. Nakreslené je to na Wikipedii: Shoelace formula.
Některé části nutně musejí mít zápornou plochu, aby to vycházelo správně.
import numpy as np
def plocha_trojuhelnika(a, b, c):
m = b - a
n = c - a
return (m[0]*n[1] - m[1]*n[0]) / 2
def main(vrcholy):
v = np.array(vrcholy)
return plocha_trojuhelnika(v[0], v[1], v[2])