arnikdehnavi's picture
Update app.py
d1f5a20
raw
history blame contribute delete
No virus
12.8 kB
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)