国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python 模擬在天空中放風(fēng)箏的示例代碼

瀏覽:28日期:2022-06-21 18:09:51
1 前言

昨天是農(nóng)歷的三月初三,相傳這一天是軒轅黃帝的誕辰日。春秋時(shí)期,三月初三的紀(jì)念活動(dòng)還是非常隆重的,至魏晉則演變?yōu)檫_(dá)官顯貴、文人雅士臨水宴飲的節(jié)日。蘭亭序中提到的'曲水流觴',也許就是這一習(xí)俗的寫照吧(個(gè)人猜想,未經(jīng)考證)。唐以后,三月初三漸漸湮沒(méi)于歷史的長(zhǎng)河中。于我而言,三月初三卻是一個(gè)放風(fēng)箏的日子。每逢這一天,耳邊總會(huì)響起一首老歌:又是一年三月三,風(fēng)箏飛滿天……上班路上,看道路兩側(cè)草長(zhǎng)鶯飛、楊柳拂面,一時(shí)玩心頓起:何不用3D構(gòu)造一個(gè)天上白云飄飄,地上綠草茵茵的虛幻空間,在里面放飛幾只風(fēng)箏自?shī)首詷?lè)呢?心動(dòng)不如行動(dòng)。打開(kāi)Python的IDLE,經(jīng)過(guò)一番嘗試,竟然輕松在一片遼闊的草原上放飛了幾只風(fēng)箏。風(fēng)箏們迎風(fēng)飄動(dòng),長(zhǎng)長(zhǎng)的風(fēng)箏線像懸鏈一樣跟著擺動(dòng)。拖動(dòng)鼠標(biāo),還可以從不同的角度、距離欣賞,恍若置身于大草原上。

python 模擬在天空中放風(fēng)箏的示例代碼

如果覺(jué)得好玩,就跟我一起到草原放風(fēng)箏吧。先說(shuō)好了,你可以搭我的便車,食宿請(qǐng)自理。不多說(shuō)了,快上車!

2 原材料2.1 Python環(huán)境和模塊

一臺(tái)安裝了Python環(huán)境的電腦,Python環(huán)境需要安裝以下模塊。

numpy scipy pillow wxgl

如果沒(méi)有上述模塊,請(qǐng)參考下面的命令安裝。我剛剛升級(jí)了wxgl模塊(從0.6.3升級(jí)到0.6.4),如果此前有安裝,請(qǐng)刪除后再次安裝.

pip install numpypip install scipypip install pillowpip install wxgl

NumPy和pillow是Python旗下最常用的科學(xué)計(jì)算庫(kù)和圖像處理庫(kù),屬于常用模塊。WxGL是一個(gè)基于PyOpenGL的三維數(shù)據(jù)可視化庫(kù),以wx為顯示后端,提供Matplotlib風(fēng)格的交互式應(yīng)用模式,同時(shí),也可以和wxPython無(wú)縫結(jié)合,在wx的窗體上繪制三維模型。關(guān)于WxGL的更多信息,請(qǐng)參閱我的另一篇博客《十分鐘玩轉(zhuǎn)3D繪圖:WxGL完全手冊(cè)》。

2.2 草原和風(fēng)箏素材

請(qǐng)下載下面的草原和風(fēng)箏素材,保存到項(xiàng)目路徑下的res文件夾中。如果使用其他圖片,請(qǐng)保持草原圖片的寬高比為4:3,風(fēng)箏素材需要帶透明通道的png格式。草原素材:sky.jpg

python 模擬在天空中放風(fēng)箏的示例代碼

風(fēng)箏素材:butterfly.jpg

python 模擬在天空中放風(fēng)箏的示例代碼

風(fēng)箏素材:eagle.jpg

python 模擬在天空中放風(fēng)箏的示例代碼

風(fēng)箏素材:fish.jpg

python 模擬在天空中放風(fēng)箏的示例代碼

2.3 打開(kāi)IDLE,導(dǎo)入模塊

>>> import numpy as np>>> from PIL import Image>>> import wxgl.wxplot as plt # 交互式3D繪圖庫(kù)>>> from scipy.spatial.transform import Rotation # 空間旋轉(zhuǎn)計(jì)算3 制作工序3.1 藍(lán)天和草原

用3D繪制天空,最常用的方法是天空頂和天空盒。不過(guò),這兩個(gè)方法都有局限性,效果只能說(shuō)差強(qiáng)人意。我們這里用的是天空盒。所謂天空盒,顧名思義,就是從一張圖片上裁切出六個(gè)矩形,拼成一個(gè)六面體,觀察者站在六面體內(nèi),就有了“天蒼蒼野茫茫”的趕腳。

python 模擬在天空中放風(fēng)箏的示例代碼

下圖是從上圖裁切出的上下前后左右六個(gè)面。

python 模擬在天空中放風(fēng)箏的示例代碼

了解了天空盒的原理,實(shí)現(xiàn)起來(lái)就簡(jiǎn)單多了。先來(lái)裁切上下前后左右六個(gè)面。

>>> im = np.array(Image.open(r’D:tempkiteressky.jpg’)) # 打開(kāi)藍(lán)天草原的圖片>>> u = im.shape[0]//3 # 天空盒(正六面體的棱長(zhǎng))>>> im_top = im[:u, u:2*u, :]>>> im_left = im[u:2*u, :u, :]>>> im_front = im[u:2*u, u:2*u, :]>>> im_right = im[u:2*u, 2*u:3*u, :]>>> im_back = im[u:2*u, 3*u:, :]>>> im_bottom = im[2*u:, u:2*u, :]

再生成立方體的六個(gè)面在三維空間中的坐標(biāo),其中每個(gè)面用四個(gè)頂點(diǎn)表示,頂點(diǎn)按逆時(shí)針?lè)较蚺帕小A⒎襟w的棱長(zhǎng)為2,也就是xyzz坐標(biāo)都在[-1,1]范圍內(nèi)。

>>> vs_front = np.array([[-1,-1,1], [-1,-1,-1], [-1,1,-1], [-1,1,1]])>>> vs_left = np.array([[1,-1,1], [1,-1,-1], [-1,-1,-1], [-1,-1,1]])>>> vs_right = np.array([[-1,1,1], [-1,1,-1], [1,1,-1], [1,1,1]])>>> vs_top = np.array([[1,-1,1], [-1,-1,1], [-1,1,1], [1,1,1]])>>> vs_bottom = np.array([[-1,-1,-1], [1,-1,-1], [1,1,-1], [-1,1,-1]])>>> vs_back = np.array([[1,-1,1], [1,-1,-1], [1,1,-1], [1,1,1]])

有了六個(gè)面的材質(zhì)和頂點(diǎn),就可以使用surface函數(shù)繪制天空盒了。

>>> plt.surface(vs_front, texture=im_front, alpha=False)>>> plt.surface(vs_left, texture=im_left, alpha=False)>>> plt.surface(vs_right, texture=im_right, alpha=False)>>> plt.surface(vs_top, texture=im_top, alpha=False)>>> plt.surface(vs_bottom, texture=im_bottom, alpha=False)>>> plt.surface(vs_back, texture=im_back, alpha=False)>>> plt.show()

咦?不對(duì)啊,為什么我在天空盒外而不是天空盒內(nèi)呢?

python 模擬在天空中放風(fēng)箏的示例代碼

原來(lái),WxGL默認(rèn)觀察者距離坐標(biāo)原點(diǎn)5個(gè)單位的距離,而天空盒在[-1,1]范圍內(nèi),自然就處于天空盒外了。莫著急,只要設(shè)置一下畫布函數(shù)plt.figure()的參數(shù),就OK了。參數(shù)dist用于設(shè)置觀察者距離觀察目標(biāo)的距離,配合方位角參數(shù)azimuth和仰角參數(shù)elevation,可以確定觀察者位置;參數(shù)view用于設(shè)置視景體,view數(shù)組的6個(gè)元素分別表示視景體的左、右、上、下面,以及前后面距離觀察者的距離。

>>> plt.figure(dist=0.8, view=[-1, 1, -1, 1, 0.8, 7], elevation=0, azimuth=0)>>> plt.surface(vs_front, texture=im_front, alpha=False)>>> plt.surface(vs_left, texture=im_left, alpha=False)>>> plt.surface(vs_right, texture=im_right, alpha=False)>>> plt.surface(vs_top, texture=im_top, alpha=False)>>> plt.surface(vs_bottom, texture=im_bottom, alpha=False)>>> plt.surface(vs_back, texture=im_back, alpha=False)>>> plt.show()

天空盒最終的效果如下圖所示。嘗試拖動(dòng)鼠標(biāo)、滑動(dòng)滾輪,你會(huì)發(fā)現(xiàn)天空盒的缺陷。不過(guò),這不會(huì)影響我們放飛風(fēng)箏。

python 模擬在天空中放風(fēng)箏的示例代碼

為了方便后續(xù)操作,我們將繪制天空盒的代碼封裝成一個(gè)函數(shù)。

>>> def draw_sky_box():plt.surface(vs_front, texture=im_front, alpha=False)plt.surface(vs_left, texture=im_left, alpha=False)plt.surface(vs_right, texture=im_right, alpha=False)plt.surface(vs_top, texture=im_top, alpha=False)plt.surface(vs_bottom, texture=im_bottom, alpha=False)plt.surface(vs_back, texture=im_back, alpha=False)>>> 3.2 第一只風(fēng)箏

現(xiàn)在觀察者位于(0.8,0,0)的位置,假定風(fēng)箏中心位于v1點(diǎn)(-0.5,-0.3,0.2)的位置(觀察者左前上方)。我們需要根據(jù)風(fēng)箏素材的尺寸,確定風(fēng)箏在空間中的坐標(biāo)。

>>> im_kite = np.array(Image.open(r’D:tempkiteresbutterfly.png’)) # 打開(kāi)風(fēng)箏圖片>>> max_s = max(im_kite.shape) # 風(fēng)箏的最長(zhǎng)邊>>> dx, dy = 0.1*im_kite.shape[0]/max_s, 0.1*im_kite.shape[1]/max_s # 計(jì)算風(fēng)箏在空間中的實(shí)際尺寸>>> v1 = (-0.5,-0.3,0.2) # 風(fēng)箏中心位置>>> vs_kite = np.array([[dx,-dy,0.03], [-dx,-dy,0], [-dx,dy,0], [dx,dy,0.03]]) # 風(fēng)箏四角的坐標(biāo),前端略高(后仰0.03)>>> vs_kite[:,0] += v1[0] # 從原點(diǎn)移到v1點(diǎn)>>> vs_kite[:,1] += v1[1] # 從原點(diǎn)移到v1點(diǎn)>>> vs_kite[:,2] += v1[2] # 從原點(diǎn)移到v1點(diǎn)>>> plt.figure(dist=0.8, view=[-1, 1, -1, 1, 0.8, 7], elevation=0, azimuth=0) # 設(shè)置畫布>>> draw_sky_box() # 繪制天空盒>>> plt.surface(vs_kite, texture=im_kite, alpha=True) # 繪制風(fēng)箏(png格式需要使用透明通道)>>> plt.show()

至此,終于在草原上放飛了第一只風(fēng)箏。

python 模擬在天空中放風(fēng)箏的示例代碼

3.3 給風(fēng)箏加上線

風(fēng)箏線近似于一條懸鏈線,我們可以用三次曲線模擬。如果放風(fēng)箏的人在v0點(diǎn),風(fēng)箏中心位于v1點(diǎn),風(fēng)箏線就可以用k個(gè)點(diǎn)來(lái)描述。先來(lái)定義一個(gè)根據(jù)v0點(diǎn)和v1點(diǎn)計(jì)算風(fēng)箏線的函數(shù)。

>>> def get_line(v0, v1, k=300):m = np.power(np.linspace(0,k,k), 3)/(k*k*k)dx, dy = v1[0]-v0[0], v1[1]-v0[1]x = v1[0] - m*dxy = v1[1] - m*dyz = np.linspace(v1[2], v0[2], k)return x, y, z>>>

重復(fù)一遍繪制天空盒和風(fēng)箏的代碼,稍加修改,即可加上風(fēng)箏線。

>>> v0 = (0.5,0.2,-1) # 放風(fēng)箏的人在v0點(diǎn)>>> v1 = (-0.5,-0.3,0.2) # 風(fēng)箏中心位于v1點(diǎn)>>> xs, ys, zs = get_line(v0, v1) # 計(jì)算風(fēng)箏懸鏈線>>> plt.figure(dist=0.8, view=[-1, 1, -1, 1, 0.8, 7], elevation=0, azimuth=0) # 設(shè)置畫布>>> draw_sky_box() # 繪制天空盒>>> plt.surface(vs_kite, texture=im_kite, alpha=True) # 繪制風(fēng)箏>>> plt.plot(xs, ys, zs, color=’#C0C0C0’, width=0.3) # 繪制風(fēng)箏懸鏈線>>> plt.show()

plt.plot()函數(shù)用于繪制點(diǎn)或線,參數(shù)width用于設(shè)置線寬。如果覺(jué)得風(fēng)箏線不夠明顯,可以適當(dāng)增加線寬。

python 模擬在天空中放風(fēng)箏的示例代碼

3.4 讓風(fēng)箏動(dòng)起來(lái)

想象一下風(fēng)箏在天空中的飄動(dòng)姿態(tài),其運(yùn)動(dòng)軌跡有兩個(gè)特點(diǎn):

水平方向延弧線擺動(dòng),幅度約30°左右

擺動(dòng)到左側(cè)則左側(cè)稍低,擺動(dòng)到右側(cè)則右側(cè)稍低

據(jù)此,不難模擬出風(fēng)箏的擺動(dòng)軌跡,計(jì)算出運(yùn)動(dòng)軌跡線上每一處風(fēng)箏的坐標(biāo),同時(shí)計(jì)算出對(duì)應(yīng)的風(fēng)箏懸鏈線。啟動(dòng)一個(gè)定時(shí)器,順序顯示軌跡線上每一處風(fēng)箏及其懸鏈線,形成動(dòng)畫。

WxGL的plt.surface()函數(shù)和plt.plot()函數(shù),支持通過(guò)參數(shù)slide=True將對(duì)應(yīng)的模型放入一個(gè)動(dòng)畫序列,執(zhí)行plt.show()的時(shí)候,會(huì)自動(dòng)播放這個(gè)模型序列,時(shí)間間隔由plt.figure()函數(shù)的interval參數(shù)決定,默認(rèn)值100毫秒。如果多個(gè)模型需要同時(shí)顯示,只需要用name參數(shù)為多個(gè)模型指定相同的名字即可。

好,我們來(lái)定義一個(gè)繪制飄動(dòng)風(fēng)箏的函數(shù)。

>>> def draw_kite(fn, v0, v1, dh=0.03, ex=(-20,20), fs=160):im_kite = np.array(Image.open(fn)) # 打開(kāi)風(fēng)箏圖片max_s = max(im_kite.shape) # 風(fēng)箏的最長(zhǎng)邊dx, dy = 0.1*im_kite.shape[0]/max_s, 0.1*im_kite.shape[1]/max_s # 計(jì)算風(fēng)箏在空間中的實(shí)際尺寸 delta = np.hstack((np.linspace(-0.03, 0.03, fs), np.linspace(0.03, -0.03, fs))) # 風(fēng)箏左右擺動(dòng)過(guò)程中的高度波動(dòng)theta = np.hstack((np.linspace(ex[0], ex[1], fs), np.linspace(ex[1], ex[0], fs))) # 風(fēng)箏左右擺動(dòng)的角度vs_kite = np.array([[dx,-dy,dh], [-dx,-dy,0], [-dx,dy,0], [dx,dy,dh]]) # 風(fēng)箏四角的坐標(biāo),前端略高(后仰)vs_kite[:,0] += v1[0]vs_kite[:,1] += v1[1]vs_kite[:,2] += v1[2] offset = np.random.randint(0, 2*fs)for i in range(2*fs): k = (i+offset)%(2*fs) rotator = Rotation.from_euler(’xyz’, [0, 0, theta[k]], degrees=True) vs = rotator.apply(vs_kite) vs[:2, 2] -= delta[k] vs[2:, 2] += delta[k] plt.surface(vs, texture=im_kite, alpha=True, slide=True, name=’id_%d’%i) xs, ys, zs = get_line(v0, ((vs[0][0]+vs[2][0])/2,(vs[0][1]+vs[2][1])/2,(vs[0][2]+vs[2][2])/2)) plt.plot(xs, ys, zs, color=’#C0C0C0’, width=0.3, slide=True, name=’id_%d’%i) >>>

調(diào)用一下試試看。

>>> plt.figure(dist=0.8, view=[-1, 1, -1, 1, 0.8, 7], elevation=0, azimuth=0, interval=50) # 設(shè)置畫布,動(dòng)畫間隔50毫秒>>> draw_sky_box() # 繪制天空盒>>> draw_kite(r’D:tempkiteresbutterfly.png’, (0.5,0.2,-1), (-0.5,-0.3,0.2)) # 繪制風(fēng)箏>>> plt.show()

和我們?cè)O(shè)想的一樣,風(fēng)箏在[-20°,20°]的范圍內(nèi)左右擺動(dòng),懸鏈線也跟著一起飄動(dòng)。

python 模擬在天空中放風(fēng)箏的示例代碼

3.5 放飛更多的風(fēng)箏

現(xiàn)在,我們有三張風(fēng)箏的圖片,把它們都放飛到天空盒中吧。至于風(fēng)箏的位置、放飛者的位置,你可以根據(jù)自己的想象,隨意定義。

>>> plt.figure(dist=0.8, view=[-1, 1, -1, 1, 0.8, 7], elevation=0, azimuth=0, interval=50)>>> draw_sky_box()>>> draw_kite(r’D:tempkiteresbutterfly.png’, (0.5,0.2,-1), (-0.5,-0.3,0.2))>>> plt.show()>>> plt.figure(dist=0.8, view=[-1, 1, -1, 1, 0.8, 7], elevation=0, azimuth=0, interval=50)>>> draw_sky_box()>>> draw_kite(r’D:tempkiteresbutterfly.png’, (0.5,0.2,-1), (-0.5,-0.3,0.2))>>> draw_kite(r’D:tempkiteresfish.png’, (0.3,0,-1), (-0.2,-0.1,0.05), ex=(-40,40))>>> draw_kite(r’D:tempkitereseagle.png’, (0.2,0.05,-1), (-0.6,0.5,0.35))>>> plt.show()

至此,大功告成。

python 模擬在天空中放風(fēng)箏的示例代碼

4 完整源碼

# -*- coding: utf-8 -*-import numpy as npfrom PIL import Imageimport wxgl.wxplot as plt # 交互式3D繪圖庫(kù)from scipy.spatial.transform import Rotation # 空間旋轉(zhuǎn)計(jì)算def draw_sky_box(fn): '''繪制天空盒 fn - 圖片文件名(寬高比4:3) ''' im = np.array(Image.open(fn)) # 打開(kāi)資源圖片 u = im.shape[0]//3 # 天空盒(正六面體的棱長(zhǎng)) # 裁切出天空盒6個(gè)面:上下前后左右 im_top = im[:u, u:2*u, :] im_left = im[u:2*u, :u, :] im_front = im[u:2*u, u:2*u, :] im_right = im[u:2*u, 2*u:3*u, :] im_back = im[u:2*u, 3*u:, :] im_bottom = im[2*u:, u:2*u, :] # 定義天空盒六個(gè)面的頂點(diǎn)坐標(biāo),4個(gè)頂點(diǎn)按逆時(shí)針?lè)较蚺帕? vs_front = np.array([[-1,-1,1], [-1,-1,-1], [-1,1,-1], [-1,1,1]]) vs_left = np.array([[1,-1,1], [1,-1,-1], [-1,-1,-1], [-1,-1,1]]) vs_right = np.array([[-1,1,1], [-1,1,-1], [1,1,-1], [1,1,1]]) vs_top = np.array([[1,-1,1], [-1,-1,1], [-1,1,1], [1,1,1]]) vs_bottom = np.array([[-1,-1,-1], [1,-1,-1], [1,1,-1], [-1,1,-1]]) vs_back = np.array([[1,-1,1], [1,-1,-1], [1,1,-1], [1,1,1]]) # 繪制天空盒的六個(gè)面 plt.surface(vs_front, texture=im_front, alpha=False) plt.surface(vs_left, texture=im_left, alpha=False) plt.surface(vs_right, texture=im_right, alpha=False) plt.surface(vs_top, texture=im_top, alpha=False) plt.surface(vs_bottom, texture=im_bottom, alpha=False) plt.surface(vs_back, texture=im_back, alpha=False)def get_line(v0, v1, k=300): '''風(fēng)箏線:從風(fēng)箏底部到放飛者,近似懸鏈線 v0 - 放飛者坐標(biāo) v1 - 風(fēng)箏底部系線處坐標(biāo) k - 描繪風(fēng)箏線的點(diǎn)的數(shù)量,默認(rèn)300點(diǎn) ''' m = np.power(np.linspace(0,k,k), 3)/(k*k*k) dx, dy = v1[0]-v0[0], v1[1]-v0[1] x = v1[0] - m*dx y = v1[1] - m*dy z = np.linspace(v1[2], v0[2], k) return x, y, zdef draw_kite(fn, v0, v1, dh=0.03, ex=(-20,20), fs=160): '''繪制風(fēng)箏 fn - 風(fēng)箏圖片文件名(png格式,帶透明通道) dh - 風(fēng)箏后仰高度,默認(rèn)0.02 ex - 風(fēng)箏左右擺動(dòng)的角度范圍 fs - 風(fēng)箏隨風(fēng)擺動(dòng)的幀數(shù) ''' im_kite = np.array(Image.open(fn)) # 打開(kāi)風(fēng)箏圖片 max_s = max(im_kite.shape) # 風(fēng)箏的最長(zhǎng)邊 dx, dy = 0.1*im_kite.shape[0]/max_s, 0.1*im_kite.shape[1]/max_s # 計(jì)算風(fēng)箏在空間中的實(shí)際尺寸 delta = np.hstack((np.linspace(-0.03, 0.03, fs), np.linspace(0.03, -0.03, fs))) # 風(fēng)箏左右擺動(dòng)過(guò)程中的高度波動(dòng) theta = np.hstack((np.linspace(ex[0], ex[1], fs), np.linspace(ex[1], ex[0], fs))) # 風(fēng)箏左右擺動(dòng)的角度 vs_kite = np.array([[dx,-dy,dh], [-dx,-dy,0], [-dx,dy,0], [dx,dy,dh]]) # 風(fēng)箏四角的坐標(biāo),前端略高(后仰) vs_kite[:,0] += v1[0] vs_kite[:,1] += v1[1] vs_kite[:,2] += v1[2] offset = np.random.randint(0, 2*fs) for i in range(2*fs):k = (i+offset)%(2*fs)rotator = Rotation.from_euler(’xyz’, [0, 0, theta[k]], degrees=True)vs = rotator.apply(vs_kite)vs[:2, 2] -= delta[k]vs[2:, 2] += delta[k]plt.surface(vs, texture=im_kite, alpha=True, slide=True, name=’id_%d’%i)xs, ys, zs = get_line(v0, ((vs[0][0]+vs[2][0])/2,(vs[0][1]+vs[2][1])/2,(vs[0][2]+vs[2][2])/2))plt.plot(xs, ys, zs, color=’#C0C0C0’, width=0.3, slide=True, name=’id_%d’%i)if __name__ == ’__main__’: plt.figure(dist=0.8, view=[-1, 1, -1, 1, 0.8, 7], elevation=0, azimuth=0, interval=50) draw_sky_box(’res/sky.jpg’) draw_kite(’res/butterfly.png’, (0.5,0.2,-1), (-0.5,-0.3,0.2)) draw_kite(’res/fish.png’, (0.3,0,-1), (-0.2,-0.1,0.05), ex=(-40,40)) draw_kite(’res/eagle.png’, (0.2,0.05,-1), (-0.6,0.5,0.35)) plt.show()

以上就是python 模擬在天空中放風(fēng)箏的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于python 模擬放風(fēng)箏的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 亚洲午夜大片 | 日日摸夜夜搂人人要 | 国产真实乱子伦精品视手机观看 | 最新福利片v国产片 | 97天天干| 成人软件网18免费视频 | 午夜香蕉成视频人网站高清版 | 亚洲视频中文字幕 | 97国产在线视频公开免费 | 亚洲精品成人久久久影院 | 国产免费自拍 | 97sese论坛 | 午夜人成 | 日韩 国产 欧美视频一区二区三区 | 久久精品爱国产免费久久 | 精品午夜一区二区三区在线观看 | 九九视频免费精品视频免费 | 日韩欧美一级毛片精品6 | 一级成人a免费视频 | 欧美日韩综合高清一区二区 | 国产精品亚洲片夜色在线 | 九九免费视频 | 美女图片131亚洲午夜 | 亚洲小视频网站 | 99久久久精品免费观看国产 | 精品色综合 | 久久99视频 | 国内精品一区二区2021在线 | 成人久久久观看免费毛片 | 怡红院免费全部视频在线视频 | 看美女毛片 | 一区二区在线看 | 国产亚洲高清在线精品不卡 | 男人的天堂在线精品视频 | 免费看a级片 | 91精品乱码一区二区三区 | 欧美成人免费全网站大片 | 欧美精品综合一区二区三区 | 亚洲精品人成在线观看 | 欧美一级片在线 | 国产成人欧美一区二区三区的 |