Para se fazer esta validação é necessário definir o critério de distância
entre os pares
de objetos geométricos. Definimos o critério de distância apenas para pares de
objetos de mesma família (ou tipo). Para simplificar, vamos nomear apenas alguns dos
exemplos de famílias mais comuns numa construção: família
dos pontos (); família das circunferências (
); e família dos segmentos
(
). O conjunto de todas as famílias de objetos será representado por
.
Deste modo, o critério de distância pode ser uma função que recebe um par de objetos
geométricos
e devolve um valor em
:
![]() |
(5.1) |
A descrição computacional dos objetos é definida para cada configuração da construção e deste modo pode
ser feita a partir de uma lista de valores numéricos. Por exemplo: um ponto pode
ser representado por um par , onde
e
são as coordenadas do ponto; uma
circunferência pode ser representada por uma tripla
, sendo
as coordenadas de
seu centro e
seu raio; e um segmento
, pode ser representado
pela quádrupla
. Deste modo, se considerarmos apenas as famílias de pontos,
circunferências e segmentos, podemos definir
conforme a equação
.
Dados dois objetos quaisquer de mesma família,
e
, se
e
são as listas que representam,
respectivamente,
e
, então:
A necessidade do mínimo () quando os objetos forem do tipo segmento é devido ao desejo de classificar
como iguais os segmentos AB e CD, mas também suas permutações AB e DC, BD e CD e BA e DC. Ou seja,
se for segmento, o critério de distância não distingue um segmento AB do segmento BA.
Uma vez definida a distância entre objetos, podemos definir a distância entre pares de construções
distintas a partir de seus objetos. Sendo e
, duas construções, e seus objetos
representados, respectivamente, por
e
, a distância entre
e
pode ser expressa conforme a tabela
. Sendo
uma função que devolve
o tipo do objeto geométrico
.
|
Se a cardinalidade das listas ![]() ![]() ![]() ![]() |
![]() |
Se
![]() |
sejam ![]() ![]() ![]() ![]() |
naturais, |
|
![]() |
|
então |
se
![]() ![]() |
|
![]() |
ou seja, dentre todas as permutações de objetos de ![]() ![]() ![]() |
é a soma das distâncias entre cada par de objetos de mesmo tipo que resulta no |
menor valor. |
|
Esta é apenas uma das possibilidades para medir distância entre construções. Uma generalização simples desta função é colocar coeficientes positivos para ponderar cada objeto.
Uma solução (construção geométrica) pode ser representada como uma função que recebe uma lista de objetos geométricos (entrada) e devolve uma outra lista de objetos geométricos (saída), que podemos representar como:
Uma instância de uma construção é a aplicação de
sobre uma dada configuração
de objetos. Uma vez determinada a distância entre pares de listas de objetos
e a representação de uma solução, podemos definir quando duas construções (soluções) são
equivalentes, como segue
.
Vale observar que se duas construções são equivalentes, a distância entre ambas é invariante
em relação às configurações iniciais, isto é, à distância computada para qualquer instância é sempre nula.
Portanto, se desconsiderarmos erros numéricos, um bom critério de validação é dizer que uma construção
esta correta sempre que for equivalente à construção
gabarito.
Entretanto existe o problema prático: como implementar
uma versão suficientemente rápida e levando em consideração os erros numéricos ?
Como construções distintas que obtém os mesmos objetos-resposta podem resultar em pequenas
diferenças numéricas, optamos por relaxar o critério de equivalência, permitindo que,
por exemplo, dois pontos ``muito próximos'' em um bom número de distintas instâncias sejam
considerados ``quase equivalentes'' (vide seção ).
Esta solução, em princípio, permite que sejam construídos
exemplos em que ocorram erros de falso positivo
(exercício errado avaliado como
correto) ou de falso negativo (exercício certo
avaliado como incorreto), mas
funciona bem na prática. Também é possível aumentar o número de instâncias a serem
testadas ou fazer outras modificações de parâmetros para reduzir/eliminar validações falsas.
Nas próximas seções, quando estiver implícito, ou for indiferente qual a lista de objetos
geométricos , utilizaremos a notação simplificada
e não
.
Seiji Isotani 2006-10-04