|
import streamlit as st |
|
import skfuzzy as fuzz |
|
from skfuzzy import control as crt |
|
import numpy as np |
|
import matplotlib.pyplot as plt |
|
import pandas as pd |
|
|
|
st.title("view analysis") |
|
|
|
t=st.sidebar.number_input("how many floors are you on?",min_value=0.0,max_value=100.0,step=1.0,value=0.0) |
|
h=st.sidebar.slider("height of your floor :",min_value=0.01,max_value=20.0,step=0.1,value=3.0) |
|
w=st.sidebar.slider('height of your neighbour ',min_value=0.01,max_value=100.0,step=0.1) |
|
s=st.sidebar.slider('the distance between you and your neighbour ',min_value=0.01,max_value=100.0,step=0.1,value=6.0) |
|
k=st.sidebar.slider('overhange',min_value=0.01,max_value=5.0,step=0.1,value=0.8) |
|
l=st.sidebar.slider('distance between your eyes and floor',min_value=0.01,max_value=4.0,step=0.1,value=1.2) |
|
f=st.sidebar.slider('distance between your eyes and window',min_value=0.01,max_value=20.0,step=0.1,value=1.7) |
|
b=st.sidebar.slider("distance between above the window and floor ",min_value=0.01,max_value=h,step=0.1,value=h-1) |
|
a=st.sidebar.slider(" height of the O-K-B ",min_value=0.01,max_value=b-0.1,step=0.1) |
|
wr=st.sidebar.slider("width of the room ",min_value=1.0,max_value=30.0,step=0.1,value=3.0) |
|
ww=st.sidebar.slider(" width of the view opening ",min_value=0.1,max_value=wr,step=0.1,value=1.0) |
|
|
|
|
|
f=-f |
|
t=-t*h |
|
plt.plot([0,s],[t,t],c='brown') |
|
plt.plot([s,s],[t,(w+t)],c='black') |
|
for i in np.arange(t,1,h): |
|
plt.plot([0,2*f],[i,i],c='black',lw=0.5,ls='--') |
|
i=i+1 |
|
plt.plot([0,0],[t,a],lw=4,c='black') |
|
plt.plot([0,0],[h,b],lw=4,c='black') |
|
plt.plot([0,0],[h,b],lw=4,c='black') |
|
plt.plot([0,2*f],[h,h],lw=4,c='black') |
|
plt.plot([0,k],[b,b],c='Yellow') |
|
|
|
if b<=l: |
|
if b!=l: |
|
c=(t-a)/((a-l)/-f) |
|
y1=((a-l)/-f)*s+a |
|
c2=(t-b)/((b-l)/-f) |
|
y2=((b-l)/-f)*s+b |
|
else: |
|
c=(t-a)/((a-l)/-f) |
|
y1=((a-l)/-f)*s+a |
|
y2=((b-l)/-f)*s+b |
|
|
|
plt.plot([0,s],[t,t],c='brown') |
|
plt.plot([s,s],[t,(w+t)],c='black') |
|
for i in np.arange(t,1,h): |
|
plt.plot([0,2*f],[i,i],c='black',lw=0.5,ls='--') |
|
i=i+1 |
|
plt.plot([0,0],[t,a],lw=4,c='black') |
|
plt.plot([0,0],[h,b],lw=4,c='black') |
|
plt.plot([0,0],[h,b],lw=4,c='black') |
|
plt.plot([0,2*f],[h,h],lw=4,c='black') |
|
plt.plot([0,k],[b,b],c='Yellow') |
|
if c >=0 and c<s: |
|
plt.scatter(f,l) |
|
plt.scatter(0,b,c='r') |
|
plt.scatter(0,a,c='r') |
|
plt.plot([f,0],[l,b],c='g',ls='--') |
|
plt.plot([f,0],[l,a],c='g',ls='--') |
|
plt.plot([0,c],[a,t],c='b',ls='--') |
|
|
|
if y1>=t and y1<=(w+t) : |
|
plt.scatter(f,l) |
|
plt.scatter(0,b,c='r') |
|
plt.scatter(0,a,c='r') |
|
plt.plot([f,0],[l,b],c='g',ls='--') |
|
plt.plot([f,0],[l,a],c='g',ls='--') |
|
plt.plot([0,s],[a,y1],c='b',ls='--') |
|
if y1>(w+t): |
|
plt.plot([0,s],[b,y2],c='b',ls='--') |
|
|
|
|
|
|
|
if c2 >=0 and c2<s: |
|
plt.scatter(f,l) |
|
plt.scatter(0,b,c='r') |
|
plt.scatter(0,a,c='r') |
|
plt.plot([f,0],[l,b],c='g',ls='--') |
|
plt.plot([f,0],[l,a],c='g',ls='--') |
|
plt.plot([0,c2],[b,t],c='b',ls='--') |
|
|
|
|
|
if y2>=t and y2<=(w+t) : |
|
plt.scatter(f,l) |
|
plt.scatter(0,b,c='r') |
|
plt.scatter(0,a,c='r') |
|
plt.plot([f,0],[l,b],c='g',ls='--') |
|
plt.plot([f,0],[l,a],c='g',ls='--') |
|
plt.plot([0,s],[b,y2],c='b',ls='--') |
|
|
|
if y2>(w+t): |
|
plt.plot([0,s],[b,y2],c='b',ls='--') |
|
st.set_option('deprecation.showPyplotGlobalUse', False) |
|
else: |
|
|
|
c=(t-a)/((a-l)/-f) |
|
y1=((a-l)/-f)*s+a |
|
c2=(t-b)/((b-l)/k-f) |
|
y2=((b-l)*(s-k))/(k-f)+b |
|
|
|
plt.plot([0,s],[t,t],c='brown') |
|
plt.plot([s,s],[t,(w+t)],c='black') |
|
for i in np.arange(t,1,h): |
|
plt.plot([0,2*f],[i,i],c='black',lw=0.5,ls='--') |
|
i=i+1 |
|
plt.plot([0,0],[t,a],lw=4,c='black') |
|
plt.plot([0,0],[h,b],lw=4,c='black') |
|
plt.plot([0,0],[h,b],lw=4,c='black') |
|
plt.plot([0,2*f],[h,h],lw=4,c='black') |
|
plt.plot([0,k],[b,b],c='Yellow') |
|
if c >=0 and c<s: |
|
plt.scatter(f,l) |
|
plt.scatter(0,b,c='r') |
|
plt.scatter(0,a,c='r') |
|
plt.plot([f,k],[l,b],c='g',ls='--') |
|
plt.plot([f,0],[l,a],c='g',ls='--') |
|
plt.plot([0,c],[a,t],c='b',ls='--') |
|
|
|
if y1>=t and y1<=(w+t) : |
|
plt.scatter(f,l) |
|
plt.scatter(k,b,c='r') |
|
plt.scatter(0,a,c='r') |
|
plt.plot([f,k],[l,b],c='g',ls='--') |
|
plt.plot([f,0],[l,a],c='g',ls='--') |
|
plt.plot([0,s],[a,y1],c='b',ls='--') |
|
if y1>(w+t): |
|
plt.scatter(f,l) |
|
plt.scatter(k,b,c='r') |
|
plt.scatter(0,a,c='r') |
|
plt.plot([f,k],[l,b],c='g',ls='--') |
|
plt.plot([f,0],[l,a],c='g',ls='--') |
|
plt.plot([a,s],[a,y1],c='b',ls='--') |
|
|
|
|
|
|
|
if c2 >=0 and c2<s: |
|
plt.scatter(f,l) |
|
plt.scatter(k,b,c='r') |
|
plt.scatter(0,a,c='r') |
|
plt.plot([f,k],[l,b],c='g',ls='--') |
|
plt.plot([f,0],[l,a],c='g',ls='--') |
|
plt.plot([k,c2],[b,t],c='b',ls='--') |
|
|
|
|
|
if y2>=t and y2<=(w+t) : |
|
plt.scatter(f,l) |
|
plt.scatter(k,b,c='r') |
|
plt.scatter(0,a,c='r') |
|
plt.plot([f,k],[l,b],c='g',ls='--') |
|
plt.plot([f,0],[l,a],c='g',ls='--') |
|
plt.plot([s,k],[y2,b],c='b',ls='--') |
|
|
|
if y2>(w+t): |
|
plt.scatter(f,l) |
|
plt.scatter(k,b,c='r') |
|
plt.scatter(0,a,c='r') |
|
plt.plot([f,k],[l,b],c='g',ls='--') |
|
plt.plot([f,0],[l,a],c='g',ls='--') |
|
plt.plot([k,s],[b,y2],c='b',ls='--') |
|
st.pyplot() |
|
|
|
st.set_option('deprecation.showPyplotGlobalUse', False) |
|
if c >=0 and c<s: |
|
if c2 >=0 and c2<s: |
|
v_Ground=(c2-c)/s |
|
v_building=0 |
|
v_sky=0 |
|
st.write("1-layer: EARTH") |
|
if c >=0 and c<s: |
|
if y2>=t and y2<=w+t : |
|
st.write("2_layer: EARTH & BUILDING") |
|
v_Ground=(s-c)/s |
|
v_building=abs(t-y2)/w |
|
v_sky=0 |
|
if c >=0 and c<s: |
|
if y2>w+t: |
|
st.write("3_Layer: EARTH & BUILDING & SKY") |
|
v_Ground=(s-c)/s |
|
v_building=1 |
|
v_sky=1 |
|
if y1>=t and y1<=w+t : |
|
if y2>=t and y2<=w+t : |
|
st.write("1_Layer:BUILDING") |
|
v_Ground=0 |
|
v_building=abs(y2-y1)/w |
|
v_sky=0 |
|
if y1>=t and y1<=w+t : |
|
if y2>w+t: |
|
st.write("2_layer: BUILDING & SKY") |
|
v_Ground=0 |
|
v_building=abs((w+t)-y1)/w |
|
v_sky=1 |
|
if y1>w+t and y2>w+t : |
|
st.write('1_Layer: SKY') |
|
v_Ground=0 |
|
v_building=0 |
|
v_sky=1 |
|
g1=[v_Ground,v_building,v_sky] |
|
g1=np.array([g1]).reshape(1,3) |
|
df=pd.DataFrame(g1,index=['visible percentage'],columns=['Earth','Building','Sky']) |
|
st.write(df) |
|
|
|
g=crt.Antecedent(np.arange(0,1,0.001),'v_Ground') |
|
build=crt.Antecedent(np.arange(0,1,0.001),'v_building') |
|
sk=crt.Antecedent(np.arange(0,1,0.001),'v_sky') |
|
emtiaz_V=crt.Consequent(np.arange(-4,24.01,0.01),'score') |
|
g['low']=fuzz.trimf(g.universe,[0,0,0.05]) |
|
g['minimum']=fuzz.trapmf(g.universe,[0,0.05,0.2,0.4]) |
|
g['medium']=fuzz.trapmf(g.universe,[0.3,0.4,0.6,0.7]) |
|
g['high']=fuzz.trapmf(g.universe,[0.6,0.8,1,1]) |
|
sk['no']=fuzz.trimf(sk.universe,[0,0,0.5]) |
|
sk['yes']=fuzz.trimf(sk.universe,[0.5,1,1]) |
|
build['low']=fuzz.trimf(g.universe,[0,0,0.05]) |
|
build['minimum']=fuzz.trapmf(g.universe,[0,0.05,0.2,0.4]) |
|
build['medium']=fuzz.trapmf(g.universe,[0.3,0.4,0.6,0.7]) |
|
build['high']=fuzz.trapmf(g.universe,[0.6,0.8,1,1]) |
|
emtiaz_V['awful']=fuzz.gaussmf(emtiaz_V.universe,0,1) |
|
emtiaz_V['bad']=fuzz.gaussmf(emtiaz_V.universe,4,1) |
|
emtiaz_V['not_bad']=fuzz.gaussmf(emtiaz_V.universe,8,1) |
|
emtiaz_V['good']=fuzz.gaussmf(emtiaz_V.universe,12,1) |
|
emtiaz_V['very_good']=fuzz.gaussmf(emtiaz_V.universe,16,1) |
|
emtiaz_V['excellent']=fuzz.gaussmf(emtiaz_V.universe,20,1) |
|
r1=crt.Rule(g['high']&build['high']&sk['yes'],emtiaz_V['excellent']) |
|
r2=crt.Rule(g['medium']&build['high']&sk['yes'],emtiaz_V['excellent']) |
|
r3=crt.Rule(g['minimum']&build['high']&sk['yes'],emtiaz_V['excellent']) |
|
r4=crt.Rule(g['low']&build['high']&sk['yes'],emtiaz_V['very_good']) |
|
|
|
r5=crt.Rule(g['high']&build['medium']&sk['no'],emtiaz_V['good']) |
|
r6=crt.Rule(g['medium']&build['medium']&sk['no'],emtiaz_V['good']) |
|
r7=crt.Rule(g['minimum']&build['medium']&sk['no'],emtiaz_V['good']) |
|
r8=crt.Rule(g['low']&build['medium']&sk['no'],emtiaz_V['not_bad']) |
|
|
|
r9=crt.Rule(g['high']&build['minimum']&sk['no'],emtiaz_V['good']) |
|
r10=crt.Rule(g['medium']&build['minimum']&sk['no'],emtiaz_V['not_bad']) |
|
r11=crt.Rule(g['minimum']&build['minimum']&sk['no'],emtiaz_V['not_bad']) |
|
r12=crt.Rule(g['low']&build['minimum']&sk['no'],emtiaz_V['bad']) |
|
|
|
r13=crt.Rule(g['high']&build['low']&sk['no'],emtiaz_V['not_bad']) |
|
r14=crt.Rule(g['medium']&build['low']&sk['no'],emtiaz_V['not_bad']) |
|
r15=crt.Rule(g['minimum']&build['low']&sk['no'],emtiaz_V['bad']) |
|
r16=crt.Rule(g['low']&build['low']&sk['no'],emtiaz_V['awful']) |
|
|
|
r17=crt.Rule(g['low']&build['low']&sk['yes'],emtiaz_V['good']) |
|
r18=crt.Rule(g['low']&build['medium']&sk['yes'],emtiaz_V['very_good']) |
|
r19=crt.Rule(g['low']&build['minimum']&sk['yes'],emtiaz_V['good']) |
|
r20=crt.Rule(g['low']&build['high']&sk['yes'],emtiaz_V['very_good']) |
|
|
|
r21=crt.Rule(g['minimum']&build['high']&sk['no'],emtiaz_V['good']) |
|
r221=crt.Rule(g['medium']&build['high']&sk['no'],emtiaz_V['very_good']) |
|
r222=crt.Rule(g['low']&build['high']&sk['no'],emtiaz_V['good']) |
|
r223=crt.Rule(g['high']&build['high']&sk['no'],emtiaz_V['very_good']) |
|
cs=crt.ControlSystem([r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16, |
|
r17, |
|
r18, |
|
r19, |
|
r20,r21,r221,r222,r223]) |
|
cs1=crt.ControlSystemSimulation(cs) |
|
g_score=cs1.input['v_Ground']=v_Ground |
|
b_score=cs1.input['v_building']=v_building |
|
sky_score=cs1.input['v_sky']=v_sky |
|
|
|
cs1.compute() |
|
cs1.output['score'] |
|
|
|
|
|
dot_r=np.array([ww/2,-f]) |
|
dot_l=np.array([-ww/2,-f]) |
|
dot_c=np.array([0,0]) |
|
cr=dot_r-dot_c |
|
cl=dot_l-dot_c |
|
|
|
zavieh=np.arccos(np.dot(cr,cl)/(np.linalg.norm(cr)*np.linalg.norm(cl))) |
|
za=np.degrees(zavieh).round(2) |
|
fig=plt.plot(-f,wr) |
|
plt.scatter(0,0) |
|
plt.scatter(-ww/2,-f,c='r') |
|
plt.scatter(ww/2,-f,c='r') |
|
plt.plot([-ww/2,-wr/2],[-f,-f],c='black') |
|
plt.plot([ww/2,wr/2],[-f,-f],c='black') |
|
plt.plot([-wr/2,-wr/2],[-f,0],c='black') |
|
plt.plot([wr/2,wr/2],[-f,0],c='black') |
|
plt.plot([0,-ww/2],[0,-f],ls='--',c='orange') |
|
plt.plot([0,ww/2],[0,-f],ls='--',c='orange') |
|
plt.text(0,0,["theta=",za]) |
|
st.pyplot() |
|
|
|
f1=crt.Antecedent(np.arange(0,-3*f,0.01),'window_width1') |
|
f2=crt.Antecedent(np.arange(0,wr,0.01),'window_width2') |
|
emtiaz_H=crt.Consequent(np.arange(-4,24.01,0.01),'score') |
|
f1['un_acc']=fuzz.trapmf(f1.universe,[0,0,-f/8,-f/4]) |
|
f1['minimum']=fuzz.trapmf(f1.universe,[-f/8,-f/4,-3*f/8,-f/2]) |
|
f1['medium']=fuzz.trapmf(f1.universe,[-3*f/8,-f/2,-3*f/4,-f]) |
|
f1['high']=fuzz.trapmf(f1.universe,[-3*f/4,-f,-3*f,-3*f]) |
|
f2['minimum']=fuzz.trimf(f2.universe,[0,0,wr/2]) |
|
f2['medium']=fuzz.trimf(f2.universe,[wr/8,wr/2,7*wr/8]) |
|
f2['high']=fuzz.trimf(f2.universe,[wr/2,wr,wr]) |
|
emtiaz_H['awful1']=fuzz.gaussmf(emtiaz_H.universe,0,1) |
|
emtiaz_H['bad1']=fuzz.gaussmf(emtiaz_H.universe,4,1) |
|
emtiaz_H['minimum1']=fuzz.gaussmf(emtiaz_H.universe,8,1) |
|
emtiaz_H['good1']=fuzz.gaussmf(emtiaz_H.universe,12,1) |
|
emtiaz_H['very_good1']=fuzz.gaussmf(emtiaz_H.universe,16,1) |
|
emtiaz_H['excellent1']=fuzz.gaussmf(emtiaz_H.universe,20,1) |
|
r22=crt.Rule(f1['un_acc']&f2['minimum'],emtiaz_H['awful1']) |
|
r23=crt.Rule(f1['un_acc']&f2['medium'],emtiaz_H['awful1']) |
|
r24=crt.Rule(f1['un_acc']&f2['high'],emtiaz_H['bad1']) |
|
|
|
r25=crt.Rule(f1['minimum']&f2['minimum'],emtiaz_H['bad1']) |
|
r26=crt.Rule(f1['minimum']&f2['medium'],emtiaz_H['minimum1']) |
|
r27=crt.Rule(f1['minimum']&f2['high'],emtiaz_H['minimum1']) |
|
|
|
r28=crt.Rule(f1['medium']&f2['minimum'],emtiaz_H['minimum1']) |
|
r29=crt.Rule(f1['medium']&f2['medium'],emtiaz_H['good1']) |
|
r30=crt.Rule(f1['medium']&f2['high'],emtiaz_H['very_good1']) |
|
|
|
r31=crt.Rule(f1['high']&f2['minimum'],emtiaz_H['minimum1']) |
|
r32=crt.Rule(f1['high']&f2['medium'],emtiaz_H['very_good1']) |
|
r33=crt.Rule(f1['high']&f2['high'],emtiaz_H['excellent1']) |
|
|
|
cs2=crt.ControlSystem([r22,r23,r24,r25,r26,r27,r28,r29,r30,r31,r32,r33]) |
|
cs3=crt.ControlSystemSimulation(cs2) |
|
f11=cs3.input['window_width1']=ww |
|
f22=cs3.input['window_width2']=ww |
|
cs3.compute() |
|
cs3.output['score'] |
|
|
|
st.set_option('deprecation.showPyplotGlobalUse', False) |