| [ Principal | Material | Comb. convexa ] |
MAC315 - 2000 |
Combinação convexa de 3 pontos
# [03/04/2000] Exemplo de comb. convexa
#
# Ojetivo: dados x1, x2, x3 e x, x no casco convexo dos 3
# prim. pontos, encontrar os pesos a1, a2 e a3 tq
# x = a1*x1 + a2*x2 + a3*x3
# a1+a2+a3=1
#
# Como: tres etapas (completem, so' a primeira esta' feita)
#
# 1. encontrar xl, interseccao da semi-reta de x3 ate' x
# com o segmento [x1,x2]
# 2. encontrar o lambda tq lambda*x1 + (1-lambda)*x2 = xl
# 3. encontrar os pesos a1, a2 e a3
#
# ^
#3 + x1:=(1,1)
# |
#2 + o x2:=(2,0) h2:=x1-x2 r2(x):=x2+x h2
# |
#1 + o o x3:=(3,2) h3:=x3-x r3(y):=x3+y h3
# |
# +---+---o---+---+---> x :=(2,1)
# 0 1 2 3
#
# Encontrar a e b: r2(b)=r3(a)
# x3+x*h3 = x2+y*h2 => x3-x2 = y*h2 - x*h3:
with(linalg):
x1:=vector( [1,1]): x2:=vector( [2,0]): x3:=vector( [3,2]):
x :=vector( [2,1]):
h2:=evalm(x1-x2): h3:=evalm(x3-x):
A := matrix( [[h2[1], -h3[1]],[h2[2],-h3[2]]] );
b := vector( [x3[1]-x2[1],x3[2]-x2[2]]):
a:=linsolve(A, b); # esta e' a resposta: a[1]=y, a[2]=x
# xl := x2 + a[1]*h2
evalm(x2 + a[1]*h2);
[-1 -1]
A := [ ]
[ 1 -1]
a := [1/2, -3/2]
[3/2, 1/2]