dz = 1
function setup() {
  createCanvas(800, 800);
  dz = 1
}
function rot_y({x,y,z},angle) {
  const c = cos(angle);
  const s = sin(angle);
  return {
    x : x*c-z*s,
    y:y,
    z: x*s+z*c 
  }
}
function rot_z({x,y,z},angle) {
  const c = cos(angle);
  const s = sin(angle);
  return {
    x : x*c-y*s,
    y:  x*s+y*c,
    z:  z
  }
}
const vs = [
  {"x":0.5,"y":0.5,"z":0.5},
  {"x":-0.5,"y":0.5,"z":0.5},
  {"x":-0.5,"y":-0.5,"z":0.5},
  {"x":0.5,"y":-0.5,"z":0.5},
  
  {"x":0.5,"y":0.5,"z":-0.5},
  {"x":-0.5,"y":0.5,"z":-0.5},
  {"x":-0.5,"y":-0.5,"z":-0.5},
  {"x":0.5,"y":-0.5,"z":-0.5},
]


function screen({x,y}) {
  return {
    x: (x+1)/2*width,
    y: (1-(y+1)/2)*height
  }
}
function project({x,y,z}) {
   return {
     x:x/z,
     y:y/z
   }
}
function trans({x,y,z},{dx,dy,dz}) {
  return {
    x:x+dx,
    y:y+dy,
    z:z+dz
  }
}

fs = []
function draw() {

  background(0);
    dz =2//+ sin(frameCount*0.01);
    if(frameCount%7==0) {
      for(i=0;i<8;i++){
        
        fs[i]= [int(random(8)),int(random(8))];
      }
    }
    for(const v of vs){
       strokeWeight(1);
      fill(0,0,0,0)
       w = trans(rot_y(rot_z(v,frameCount*.025),frameCount*.025),{dx:0,dy:0,dz:dz});
       pp = screen(project(w))  
       circle(pp.x,pp.y,50/abs(w.z));
      fill(255)
      textSize(50/abs(w.z))
      if(frameCount%7<1)text("䰾䲁䲘䴉一上下不且世丟両並中主久之乎也乾亂了予事二互亙些亞亡交享亮亸人什仁今介仍仔他付代令以件任份企伏伐休伙估伴似但佇佈位低住佔何作你佩併使來侖依侮侵侶侷便俁係保俠信修倀倆倉個倍們倒倖候借倣倦倫值偉做停側偵偷偺偽傑傖傘備傚傢傭傯傲傳傴債傷傻傾僂僅僉像僑僕僥僨僱價儀儂億儈儉儐儔儕儘償優儲儷儺儻儼兄充兆兇先光克兌免兒兗入內全兩公共其具冊再冑冒冠冪冷凃凍凜凱出刃分切別利刪到制剄則剋前剎剛剝剩剪剮副割剴創剷劃劇劉劊劌劍劑力功加劣助努効勁勇勉動勗務勚勛勝勞勢勦勩勱勳勵勸勻包化匭匯匱區十千升午半卑卓協博占卡危即卹卻厙原厠厭厲厴去參叄又及友反取受叛叡叢口另只叫召可台史司吃各合吋同名吐向否吧吳吶吹呀呂呃呆告呎呢周呸呼命和咖咼品哇哈哎員哥哦哪哭哼唄唝唯唸啊問啞啟啡啣啦啰啴善喊喚喜喧喪喫喬單嗆嗇嗊嗎嗚嗩嗯嗶嘆嘍嘔嘖嘗嘛嘜嘩嘮嘯嘰嘴嘵嘻嘽嘿噁噓噝噢噥噦器噯噲噴噸噹嚀嚇嚐嚕嚙嚥嚦嚨嚮嚲嚳嚴嚶囀囁囂囅囈囉囊囌囑四回因囪圇國圍園圓圖團土在地圾坐坦坵垃型垯垱埃埋城域埡執培基堅堆堝堪堯報場塆塊塋塏塒塗塚塢塤填塵塹境墊墜增墮墳墶墾壇壋壓壘壙壚壞壟壠壢壩壪士壯壺壽外多夠夢夥大天太夫失夾奇奐奧奩奪奮女奴她奼好如妙妝妨妳始姍姑姦姪姿威娘娛婁婭婳媧媯媼媽嫗嫵嫺嫻嫿嬈嬋嬌嬙嬝嬡嬤嬪嬰嬸孃孌子字存孤孩孫學孿宂它宅宇安完官宙定客宣宮害家容寂寄密富寞寡寢實寧審寫寬寵寶封射將專尊尋對導小少尖就尷尾局屁屃居屆屍屓展屜屢層屨屬岡峣峯峴島峽崍崑崗崙崢嵐嵒嵚嶁嶄嶇嶔嶗嶠嶢嶧嶴嶸嶺嶽巋巒巔巖工巧巨差巰己已巴市希帥師席帳帶常幀幃幗幘幟幣幫幬平年幹幼幾床底度庫庭廁廂廄廈廚廝廟廠廡廢廣廩廬廳延建式弒弔弟弱張強彆彈彌彎彙形彥彩彫影彼往征待很後徑徒得從徠復徬微徹心必忍志忘忙忠快忽怎怕思急性怪恆恐恕恥恨恩息悅您悲悵悶悽情惜惡惱惲想惶惹惻意愚愛愜感愨愴愷愾慄慇慈態慍慘慚慟慢慣慨慪慫慭慮慳慶慷慼慾憂憊憐憑憒憖憚憤憫憮憲憶憾懂懃懇應懌懍懟懣懨懲懶懷懸懺懼懾戀戇成我戔或戧戩戰戲戶所扁手才打扞扭找承技把投抗抱抵抹拆拋拘招拜拭拯拿持指按挑振挺挾捏捕捨捫捲掃掄掉排掙掛採探掣接控推掩揀揍描提揚換揮揹揾搆損搖搗搞搥搧搭搵搶搾摀摃摑摜摟摧摯摳摶摻撈撐撓撕撚撟撣撥撫播撲撳撻撾撿擁擄擇擊擋擔據擠擣擦擬擯擰擱擲擴擷擺擻擼擾攄攆攏攔攖攙攛攜攝攢攣攤攩攪攬支收改攻放故敍救敗敘教敞敢散敬整敵數斂斃文斕料斥斬斯新斷方於施旂旅既日早旸昇明易星是昽時晉晚晝暈暉暗暘暢暫暱曄曆曇曉曖曠曨曬曲更書曾最會月有朋服朗望期朧本朮材束東果枱枴架某染柵柺柿校根格桶桿梔梘條梟梱梲梾梿棁棄棍棒棖棗棚棟棧棲棶楊楓楚楨業極概榦榮榿槃構槍槓槚槜槤槧槨槳樁樂樅樑樓標樞模樣樸樹樺橈橋機橢橫檁檇檉檔檜檟檢檣檯檳檸檻檾櫂櫃櫓櫚櫛櫝櫞櫟櫥櫧櫨櫪櫫櫬櫱櫳櫸櫺櫻欄權欏欒欖次欣欲欺欽款歉歌歎歐歛歟歡止正此步武歲歷歸死歿殆殘殞殤殫殭殮殯殲段殺殼毀毆母每毒比毘毿氂氈氌氣氫氬氳水永氹氾求汎汙汰汲決沄沉沍沒沖沨治況泊法注洩洶活派流浈浐浪浬浹涇消涢涯涼淒淘淚淡淥淨淪深淵淶混淺清渙減渢渣渦測渴渾湊湞湧湯溇溈源準溝溫溳溼滄滅滌滎滓滪滬滯滲滴滸滻滾滿漁漂漊漚漢漣漫漬漲漸漿潁潑潔潛潤潯潰潿澀澆澇澐澗澠澤澦澮澱激濁濃濕濘濛濟濤濫濬濰濱濺濼濾瀅瀆瀉瀋瀏瀕瀘瀝瀟瀠瀦瀧瀨瀰瀲瀾灃灄灑灘灝灣灤灩火灰災炮炸為烈烏烤烴無然煇煉煒煖煙煢煥照煩煬熒熗熱熾燁燄燈燉燐燒燙燜營燦燬燭燴燻燼燾爍爐爛爭父爸爺爾牀牆片牘牠物牲牴特牽犖犛犢犧犯狀狂狗狝狹狽猙猛猶猻獁獄獅獎獨獪獫獮獰獲獵獷獸獺獻獼玀玆率玙玚玡玨玩珮珰現球理琍琎琺琿瑋瑒瑣瑤瑩瑪瑯璉璡璣璦璫環璵璽瓊瓏瓔瓚瓦甌甕甚生產甦用由甲甽界留畢略畫畬異當疇疊疭病痙痛痠痲痳痺瘆瘉瘋瘍瘓瘞瘡瘧瘮瘲瘺療癆癇癉癒癘癟癡癢癤癥癧癩癬癭癮癰癱癲發白百的皚皮皰皸皺盃益盔盡監盤盧目直相眉看真眠眼眾睜睡瞄瞧瞭矓知短石破硜硤硨硯碌碎碟確碼磧礙礪礫礬示社祝神禁禕禮秀私秈科秘移程稚種稱穌穎穠穡空穿突窮窶窺竊立站竟童端競笑笨第筆等答筜筧箇算管節篋篔簀簡簣籃籟籠籩籮粉精糕糖糝糟糲糶系糾約紅紆紈紉納紕級紜紡索細紲絀終組絆絎結絕絝絢給統絲綁綃綆綌經綞綢綣綬綯綰網綸綺綻綽綾緇緒緖緘緙緣緬練縉縊縐縑縝縟縭縮縲縵縶總繅繡繪繫繭繰繹繼繽繾纈纊續纓纜缺罌罩罪置罵罷羆羋美群羥羨義習翻翼翽老者而耬耶聊聘聞聯聰聲聳職聽肉肘肚肢肩肯背胎能脅脆腖腡腥腦腳膃膜膝膽膾臂臉臝臠臥自臭至臺與興舉舊舞般船艘艦良艱色芐花芽苦英荷莧菜華萇萌萬落葒著蒐蒓蒔蒙蓀蓄蓋蓽蔓蔭蔹蕆蕎蕕蕢蕩蕪蕭薄薈薊薌薘薟薩薪薺藎藏藥藪藹蘄蘊蘗蘚蘞蘢蘺處虛虧蛋蛺蜂蝦螄螻蟄蟈蟎蟣蟲蟶蠐蠑蠢蠱血衊行術街衛衞衣表袋被袯裊補裡製複褘褳褻襇襏襝襠襯襲襴西要覆見規覓視覘覡覦親覬覲覷覺覽覿觀解觴觶觸言計訊討訓訖託記訥訪設許訴訶詁詆詎詔評詘詡試詭話該誄誅誆誇認誑誓誚誣誤誦誨說誰課誶誹誼調談請諍諒論諗諜諞諢諤諧諫諭諳諶諷諼諾謁謅謊謎謐謔謖謗謙講謝謫謳謾證譎譏譖識譙譚警譭議譴護譾讀變讎讒讓讖豐豔豪貝負財貨貰貳貴貶買貺費賃資賊賑賒賕賞賠賣賤質賫賬賭賽賾贍贏贐贓贔贖贗贛赬走起超越趕趣趲足跑跟路跳踩蹕蹩蹺躂躊躋躑躓躕躚躡躥躪身躲軀車軋軌軍軑軟軤軫軲軹軺軼軾較輅輇載輊輕輛輜輞輟輩輬輯輸轀轄轅轆轉轍轔轟轡轢轤辜辮辱迅迎近返迪迫述迷追退送逃透逐途這通逝逞速造連進逼遇遊運遍過道達違遘遠適遭選遺遼避還邐那邪部郵都鄆鄒鄔鄖鄙鄭鄲鄴酈配酷醒醬釁釃釅采釋重量金釓釕釗釧釩釵釷釹釺鈀鈁鈃鈄鈈鈎鈐鈑鈔鈕鈞鈥鈮鈷鈹鉈鉉鉋鉑鉕鉗鉚鉞鉦鉬鉭鉸鉺鉻鉿銃銍銖銚銠銣銥銨銩銪銬銱銳銹銻銼鋁鋃鋌鋏鋙鋝鋟鋥鋦鋨鋯鋸錁錇錒錕錘錙錚錛錟錡錢錮錯錳錶錸鍁鍃鍆鍇鍘鍠鍰鍶鍺鍾鎂鎊鎖鎛鎡鎢鎣鎦鎧鎩鎬鎮鎳鎵鎿鏃鏌鏑鏗鏜鏝鏞鏡鏨鏵鏷鏹鐃鐋鐒鐔鐙鐝鐠鐦鐫鐸鐺鑌鑒鑔鑞鑠鑥鑭鑹鑼鑽钂铘铴镋長門閂閃閉開閌閎閒間閘閡閣閥閨閩閲閼闈闊闋闐闓闔闖關闞闥防阻附限陘院除陷隉隊隕際障隨險隴雄雅集雇雕雖雙雛雜離難雲零雷電需露霸霽靂靈靚靜非靠面靨革鞀韁韃韉韙韜韞音響頇須頏預頑頓領頡頭頲顆題願顙類顢顥顧顯顰颭颮颯颳颶颸飄飛飫飴飿餄養餎餏餐餑餓餛餜餞餡館餳餶餷餾餿饁饃饉饊饗饞饢馌首馨馬馭馱駁駑駒駔駘駛駟駢駭駱駿騂騅騏騖騙騤騭騮騶騸驃驅驍驏驕驗驚驤驪骨骸體髖高鬆鬍鬥鬧鬨鬩鬮鬼魎魔魘魚魢魨魯魴魷鮃鮐鮑鮓鮫鮶鯇鯉鯢鯤鯧鯪鯫鯴鯷鯿鰃鰈鰏鰓鰛鰣鰥鰩鰭鰱鰳鰺鰾鱅鱈鱒鱔鱘鱝鱟鱠鱭鱷鱸鲺鳥鳲鳴鴆鴇鴕鴛鴝鴯鵃鵐鵑鵒鵓鵜鵠鵡鵮鵯鶉鶘鶥鶯鶹鶻鶼鶿鷂鷊鷓鷗鷙鷚鷯鷸鸌鸏鸕鸚鸛鸝鸞鸤鹝鹲麗麪麻麼麽黌黏默點黷鼓鼕鼴齔齕齙齟齠齪齬齷龐龕"[int(random(2626))],pp.x-25+sin(frameCount*random(50)+i)*5,pp.y-25+sin(frameCount*random(50)+i)*25,1)
      }
  
    for(const f of fs) {
    
        for(let i=0;i<f.length;++i){
          const a = trans(
            rot_y(rot_z(vs[f[i]],frameCount*.025),frameCount*.025)
            ,{dx:0,dy:0,dz:dz})
          const b = trans(rot_y(rot_z(vs[f[(i+1)%f.length]],frameCount*.025),frameCount*.025),{dx:0,dy:0,dz:dz});
        
          const aa=screen(project(a))
          const bb=screen(project(b))
          stroke(255/a.z)
          strokeWeight(10/(a.z));
          line(aa.x,aa.y,bb.x,bb.y)
          stroke(255/a.z,255/a.z,255/a.z)
          strokeWeight(10/(a.z));
          line(aa.x+random(-10,10),aa.y+random(-10,10),bb.x+random(-10,10),bb.y+random(-10,10))
        }
    }
}