How lit is this room?  pt. 1
Python 3, 388 398 408 409 415 417 493 bytes



To make it more accurate, increase n



from random import*
u=uniform
c=lambda A,B,C:(C[1]-A[1])*(B[0]-A[0])&gt;(B[1]-A[1])*(C[0]-A[0])
I=lambda A,B,C,D:c(A,C,D)!=c(B,C,D)and c(A,B,C)!=c(A,B,D)
def a(l,v,n=9**6,s=0):
 g=lambda i:(min(x[i]for x in v),max(x[i]for x in v))
 for _ in'x'*n:
  h=((u(*g(0)),u(*g(1))),l);s+=any([I(*f,*h)for f in list(zip(v,v[1:]+[v[0]]))])^1
 return(abs(g(0)[0]-g(0)[1])*abs(g(1)[0]-g(1)[1]))*float(s/n)


Basic Monte-Carlo approach.  Steps listed below.  


Find x and y ranges that the shape occupies.
Create a list of edges created by the vertices
Iterate a large number of times (the more the better)
Create a random point (j,k) inside the x,y range.
Check if any of the edges intercept with the line-segment created by the light and the random point. If any of the edges intercept, increment the variable s
Divide s by the total numbers, then multiply by the total range area.


Ungolfed version:



import random

def ccw(A,B,C):
    return (C[1]-A[1])*(B[0]-A[0]) &gt; (B[1]-A[1])*(C[0]-A[0])

def intersect(A,B,C,D):
    return ccw(A,C,D) != ccw(B,C,D) and ccw(A,B,C) != ccw(A,B,D)

def lit_area(light, vertices):
    # points: list of points
    # i     : x =&gt; i=0
    #       : y =&gt; i=1
    get_range = lambda i: (min(x[i] for x in vertices), max(x[i] for x in vertices))
    xr = abs(get_range(0)[0] - get_range(0)[1])
    yr = abs(get_range(1)[0] - get_range(1)[1])

    edges = list(zip(vertices, vertices[1:] + [vertices[0]]))

    num_sims = 1000000

    num_successes = 0
    for _ in range(num_sims):
        guess_x = random.uniform(*get_range(0))
        guess_y = random.uniform(*get_range(1))

        light_guess_line = ((guess_x, guess_y), light)

        if not any([intersect(*e, *light_guess_line) for e in edges]):
            num_successes += 1
    return float(num_successes / num_sims) * (xr * yr)


if __name__ == "__main__":
    points = [
    (1/2, 18),
    (1,3),
    (5,1/2),
    (7,5),
    (12,7),
    (16,3),
    (15,11),
    (8,19),
    (3,7)
    ]
    light_source = (5,8)
    print("Area lit by light: %f"% lit_area(light_source, points))


Try it online!

Credit for line intersection algorithm

Also, credit to all the helpful commenters on how to golf this even further.