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=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=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=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=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=0 and c2=0 and c=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 cw+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)