Area de un rombo

(x1,y1)=(0.5,0)
(x2,y2)=(1,0.5)
(x3,y3)=(0.5,1)
(x4,y4)=(0,0.5)

plt.plot(x1,y1,'ob')
plt.plot(x2,y2,'oy')
plt.plot(x3,y3,'oc')
plt.plot(x4,y4,'om')

plt.grid()
plt.axis('square')
plt.show()
Np=4
xp=np.array([0.5,1,0.5,0])
yp=np.array([0,0.5,1,0.5])

for i in range(Np):
    plt.plot(xp[i],yp[i],'ob')
    
x_aux=np.array([xp[0],xp[1]])
y_aux=np.array([yp[0],yp[1]])
plt.plot(x_aux,y_aux,'--k')

x_aux=np.array([xp[1],xp[2]])
y_aux=np.array([yp[1],yp[2]])
plt.plot(x_aux,y_aux,'--k')

x_aux=np.array([xp[2],xp[3]])
y_aux=np.array([yp[2],yp[3]])
plt.plot(x_aux,y_aux,'--k')

x_aux=np.array([xp[3],xp[0]])
y_aux=np.array([yp[3],yp[0]])
plt.plot(x_aux,y_aux,'--k')

plt.grid()
plt.axis('square')
plt.show()
def rombo(xp,yp,Np):

 for i in range(Np):
    plt.plot(xp[i],yp[i],'ob')    

 x_aux=np.array([xp[0],xp[1]])
 y_aux=np.array([yp[0],yp[1]])
 plt.plot(x_aux,y_aux,'--k')

 x_aux=np.array([xp[1],xp[2]])
 y_aux=np.array([yp[1],yp[2]])
 plt.plot(x_aux,y_aux,'--k')

 x_aux=np.array([xp[2],xp[3]])
 y_aux=np.array([yp[2],yp[3]])
 plt.plot(x_aux,y_aux,'--k')

 x_aux=np.array([xp[3],xp[0]])
 y_aux=np.array([yp[3],yp[0]])
 plt.plot(x_aux,y_aux,'--k')

 plt.grid()
 plt.axis('square')

Np=4
xp=np.array([0.5,1,0.5,0])
yp=np.array([0,0.5,1,0.5])

rombo(xp,yp,Np)

x=random()
y=random()
def rombo(xp,yp,Np):

 for i in range(Np):
    plt.plot(xp[i],yp[i],'oy')    

 x_aux=np.array([xp[0],xp[1]])
 y_aux=np.array([yp[0],yp[1]])
 plt.plot(x_aux,y_aux,'--k')

 x_aux=np.array([xp[1],xp[2]])
 y_aux=np.array([yp[1],yp[2]])
 plt.plot(x_aux,y_aux,'--k')

 x_aux=np.array([xp[2],xp[3]])
 y_aux=np.array([yp[2],yp[3]])
 plt.plot(x_aux,y_aux,'--k')

 x_aux=np.array([xp[3],xp[0]])
 y_aux=np.array([yp[3],yp[0]])
 plt.plot(x_aux,y_aux,'--k')

 plt.grid()
 plt.axis('square')

Np=4
xp=np.array([0.5,1,0.5,0])
yp=np.array([0,0.5,1,0.5])

rombo(xp,yp,Np)

xr=0.5+0.5*random()
yr=random()
plt.plot(xr,yr,'ok')

arriba1=0

yl = yp[0]+( (yp[1]-yp[0])/(xp[1]-xp[0]) )*(xr-xp[0])
if yr > yl:
    arriba1 = 1
    print('El punto esta ARRIBA de la linea')
    print('que une a los puntos (x[0],y[0]) y (x[1],y[1])')
    print()

if yr <= yl:
    arriba1 = 0
    print('El punto esta ABAJO de la linea')
    print('que une a los puntos (x[0],y[0]) y (x[1],y[1])')
    print()

plt.plot(xr,yl,'om')
plt.show()


Np=4
xp=np.array([0.5,1,0.5,0])
yp=np.array([0,0.5,1,0.5])

rombo(xp,yp,Np)

xr=0.5+0.5*random()
yr=random()
plt.plot(xr,yr,'ok')

arriba1=0
yl = yp[0]+( (yp[1]-yp[0])/(xp[1]-xp[0]) )*(xr-xp[0])
if yr>yl : arriba1=1

arriba2=0
yl = yp[1]+( (yp[2]-yp[1])/(xp[2]-xp[1]) )*(xr-xp[1])
if yr>yl : arriba2=1

if arriba1==1 and arriba2==0:
 plt.plot(xr,yr,'og')
else:
 plt.plot(xr,yr,'or')
    
print(arriba1,arriba2)
plt.show()
Np=4
xp=np.array([0.5,1,0.5,0])
yp=np.array([0,0.5,1,0.5])

rombo(xp,yp,Np)



for i in range(100):

 xr=0.5+0.5*random()
 yr=random()
 plt.plot(xr,yr,'ok')

 arriba1=0
 yl = yp[0]+( (yp[1]-yp[0])/(xp[1]-xp[0]) )*(xr-xp[0])
 if yr>yl : arriba1=1

 arriba2=0
 yl = yp[1]+( (yp[2]-yp[1])/(xp[2]-xp[1]) )*(xr-xp[1])
 if yr>yl : arriba2=1

 if arriba1==1 and arriba2==0:
  plt.plot(xr,yr,'og')
 else:
  plt.plot(xr,yr,'or')
    
# print(arriba1,arriba2)
plt.show()
for i in range(1000):

 xr=0.0+random()
 yr=random()
 plt.plot(xr,yr,'ok')

 arriba1=0
 yl = yp[0]+( (yp[1]-yp[0])/(xp[1]-xp[0]) )*(xr-xp[0])
 if yr>yl : arriba1=1

 arriba2=0
 yl = yp[1]+( (yp[2]-yp[1])/(xp[2]-xp[1]) )*(xr-xp[1])
 if yr>yl : arriba2=1

 arriba3=0
 yl = yp[2]+( (yp[3]-yp[2])/(xp[3]-xp[2]) )*(xr-xp[2])
 if yr>yl : arriba3=1

 arriba4=0
 yl = yp[3]+( (yp[3]-yp[0])/(xp[3]-xp[0]) )*(xr-xp[3])
 if yr>yl : arriba4=1

 if arriba1==1 and arriba2==0 and arriba3==0 and arriba4==1:
  plt.plot(xr,yr,'og')
 else:
  plt.plot(xr,yr,'or')

plt.grid()
plt.axis('square')
plt.show()