# Mean Value Coordinates ```import maya.OpenMaya as om
from math import *
import maya.cmds as cmds

def wi(v,vi,tris):
#calculates the weights
#v = kernal of the starshaped polyhedron. this is the point that
#	will be deformed
#vi = the current vert we are iterating over on the bounding polyhedron
#tris = all triangle facets on the polyhedron that vi is a member of
def A(vr,vs):
#get an angle
vec1 = vr-v
vec2 = vs-v
return vec1.angle(vec2)
def N(vr, vs):
#get the normal
vecr = vr-v
vecs = vs-v
norm = vecr^vecs
norm.normalize()
return norm

def ut(i,j,k):
#floater's equation for ut
top = A(j,k) + A(i,j)*( N(i, j)*N(j, k) ) + A(k,i)*(N(k, i)*N(j, k))
bot = 2*( (v-i)*N(j,k) )

ri = v.distanceTo(vi)
#pass all the triangles through floaters equation and sum up the results
ut_sum = 0
for t in tris:
ut_sum += ut(t, t, t)
return ut_sum/ri

class MVC():
def __init__(self):
#this is our main vert, the one that will be deformed
self.v = u.pnt("v")
self.bary = self.get_bary()

def update(self):
v = self.v
#refresh the list p with the current location of the locators in maya
p = [u.pnt("v0"), u.pnt("v1"), u.pnt("v2"), u.pnt("v3")]
x,y,z = 0,0,0
for i in range(len(p)):
x += p[i].x*self.bary[i]
y += p[i].y*self.bary[i]
z += p[i].z*self.bary[i]
#place a new locator at the deformed position
u.loc(om.MPoint(x, y, z))

def get_bary(self):
#get the barycentric weights
v = self.v
#get 4 points from maya that represent a polygon
p = [u.pnt("v0"), u.pnt("v1"), u.pnt("v2"), u.pnt("v3")]
#create a list of verts and all triangles that that vert
#	is a memeber of
#the triangels are i,j,k, going counter clock wise, and
#	i = the associated vert that will be iterated over
vert_tri=[
[p, [(p, p, p), (p, p, p), (p, p, p),]],
[p, [(p, p, p), (p, p, p), (p, p, p),]],
[p, [(p, p, p), (p, p, p), (p, p, p),]],
[p, [(p, p, p), (p, p, p), (p, p, p),]],
]

#verify in maya that all triangles are counter clockwise,
#	normal outward, and begin with the same vert,
#	the one that will be iterated over
verify_triangles(vert_tri)

#get the weight
weights = []
for vt in new_vert_tri:
t= list(vt)
t.reverse()
weights.append(wi(v, vt, t))

#get the bary weights
bary_weights=[]
weights_sum = sum(weights)
for w in weights:
bary_weights.append(w/weights_sum)
return bary_weights
```