久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Javascript結合Vue實現對任意迷宮圖片的自動尋路

瀏覽:124日期:2023-09-28 15:00:19
目錄前言二維數組,一本道映射基礎界面廣度優先,地毯式搜索地圖編輯優化尋路算法對圖片進行尋路自定義起始點,以及隨時變更路線處理彩色圖片性能優化前言

可以直接體驗最終效果:https://maze-vite.vercel.app/

尋路前:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

尋路后,自動在圖片上生成紅色路徑,藍色是探索過的區域:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

這里我故意用手機斜著角度拍,就是為了展示程序完全可以處理手機從現實拍攝的迷宮圖片。

整個程序我準備用 Vue 3 + Vite 來寫,但其實用不用 Vue 都一樣,不會涉及復雜的界面,用別的框架甚至不用框架其實也完全可以。

二維數組,一本道

說了要從零開始,所以先嘗試從非常簡單的迷宮入手吧

Javascript結合Vue實現對任意迷宮圖片的自動尋路

對于我們人類來說,這個迷宮十分簡單,顯而易見的只有一條路。但是計算機解決這樣的迷宮還是得稍微花費那么一點力氣的。

二維數組很適合用來表達這個迷宮:

const m = [ [1, 1, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 1, 0], [0, 0, 0, 1, 1]]

1 代表可以走的格子,0 代表不能走的格子。每個格子可以使用 [x, y] 來表示,比如這里起點是 [0, 0],終點是 [3, 4]。

那么應該有這么一個函數: function solveMaze (matrix, begin, end) {//...},matrix是描述迷宮的二維數組,begin 是起點,end 是終點,最終返回值是一個有序集合,每一個元素是一個格子,代表正確的路線軌跡。

這里我們準備采用的策略十分簡單,從起點開始,看看周圍上下左右(不能斜著走)哪些是可以走的格子,然后移動到這個格子,接著循環上面的步驟,直到遇到 end 格子,注意還需要記錄上一步的格子,把它排除,以免走回頭路。具體看以下代碼:

// maze.jsfunction getPoint(m, x, y) { if (x >= 0 && y >= 0 && x < m.length && y < m[x].length) { return m[x][y] } else { return 0 }}function getNextPoint(m, current, lastPoint) { let [x, y] = current let nextPoint = [ [x - 1, y], [x + 1, y], [x, y - 1], [x, y + 1] ].find(p => { let r1 = getPoint(m, p[0], p[1]) > 0 let r2 = !isSamePoint(p, lastPoint) return r1 && r2 }) return nextPoint}function isSamePoint (p1, p2) { return p1[0] === p2[0] && p1[1] === p2[1]}function solveMaze (matrix, begin, end) { let path = [] // 當前點 let current = begin path.push(current) // 上次走過的路 let lastPoint = begin // 隨便挑一個可以走的點 while (1) { if (isSamePoint(current, end)) { break } let validPoint = getNextPoint(matrix, current, lastPoint) path.push(validPoint) lastPoint = current current = validPoint } return path}const m = [ [1, 1, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 1, 0], [0, 0, 0, 1, 1]]console.log( solveMaze(m, [0, 0], [3, 4]))

getNextPoint 獲取可以下一步通行的格子,solveMaze 獲取最終可行走的路徑,控制臺輸出:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

這些坐標就是最終的行走軌跡,目測是正確的。

映射基礎界面

為了方便測試觀察,得把我們的數據結構映射到網頁上面。

// maze.js// ...// 導出 solveMaze 函數,讓vue組件調用export { solveMaze}

<template> <div> <div class='div-matrix'> <div v-for='(row, x) in matrix' :key='x'><div : v-for='(p, y) in row' :key='y' :style='{ left: `${y * 2.5}em`, top: `${x * 2.5}em` }'> {{ begin[0] === x && begin[1] === y ? ’B’ : ’’ }} {{ end[0] === x && end[1] === y ? ’E’ : ’’ }}</div> </div> </div> </div></template><script>import { solveMaze } from ’./maze’export default { data () { return { begin: [0, 0], end: [3, 4], matrix: [], paths: [] } }, methods: { isPath (x, y) { const p = this.paths.find(path => path[0] === x && path[1] === y) return p } }, created () { const m = this.matrix = [ [1, 1, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 1, 0], [0, 0, 0, 1, 1] ] this.paths = solveMaze(m, this.begin, this.end) }}</script><style>.top { margin-bottom: 1em;}.div-matrix { position: relative;}.cell { border: 1px black solid; width: 2em; height: 2em; position:absolute; text-align: center;}.cell.path { border: 1px red solid;}.black { background: black;}</style>

最終效果:

其實就是通過二維數組 matrix 生成對應 div,數組里面元素值決定黑白。paths 數組存儲結果路徑,把路徑用紅色邊框標記出來。這樣就方便以后測試結果的查看了。

廣度優先,地毯式搜索

看看下面這個迷宮:

const m = this.matrix = [ [1, 1, 0, 0, 0], [1, 1, 1, 1, 1], [0, 1, 0, 1, 0], [0, 1, 0, 1, 1]]

如果把他應用到上面的代碼,會發現頁面卡死了,這是因為這個迷宮含有岔路,導致算法一直在繞圈。我們需要一些手段,把走過的路記住,以后就不再走了,方法不難,只要把當前可以走的格子,放進一個隊列中,然后要做的,就是不斷對這個隊列里的格子,作出同樣處理,直到遇到終點格子。

為了方便我們用算法進行處理,需要使用新的數據結構來表達,它就是 圖(Graph) 結構。

Javascript結合Vue實現對任意迷宮圖片的自動尋路

圖結構和鏈表很像,最大不同是每個節點可以有多個指針指向不同的節點。

同時把二維數組給他降維打擊,變成一維:

const m = [ 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1]

雖然這樣訪問起來不那么直接,但是只需要一次尋址,復制傳輸也比二維數組方便得多。

然后創建一個 Node 類代表節點,NodeGraph 類代表整個圖結構。

class Node { constructor (x, y, value) { this.x = x this.y = y this.value = value this.checked = false this.nearNodes = [] }}class NodeGraph { constructor (matrix, width, height) { this.nodes = [] this.matrix = matrix this.width = width this.height = height } buildNodeGraph () { let { width, height } = thisfor (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) {let node = this.getNode(x, y) let up = this.getNode(x, y - 1)let down = this.getNode(x, y + 1)let left = this.getNode(x - 1, y)let right = this.getNode(x + 1, y)node.nearNodes = [ up, down, left, right].filter(node => node && node.value === 1) } } } getNode (x, y) { let { nodes, width, matrix } = this if (x >= 0 && y >= 0) { let node = nodes[y * width + x] if (!node) {let value = matrix[y * width + x]if (value !== undefined) { node = new Node(x, y, value) nodes[y * width + x] = node} } return node } else { return null } }}

buildNodeGraph 把 matrix 數組轉換為圖結構,每個節點的 nearNodes 就相當于是下一步可以走的格子集合,checked 表示這個節點是否已經探索過。

為了方便查看每一步狀態的變化,需要把當前所在格子和隊列中的格子,在畫面上標記出來,完整代碼我就不貼了,codesandbox 可以隨意看:

藍色邊框就是隊列中的格子,小人就是當前所在的格子,當它走到右下角時就會停下來。

目前做的,只是順利讓小人移動到終點而已,但是怎么得出我們要的路徑呢?方法就是在 Node 多加一個屬性 parent,記錄上一個 Node。當取出 nearNodes 時,把當前節點賦值到每一個 nearNode 的 parent 即可:

// ...for (let node of current.nearNodes) { if (node.checked === false) {node.parent = currentqueue.push(node) }}// ...

然后就是從當前節點,讀取 parent 一個一個回溯即可:

function buildPath (endNode) { let path = [] let node = endNode while (node) { path.push(node) node = node.parent } return path}

效果:

當小人到達終點時,紅色方格就是最短路徑了。

地圖編輯

稍微改動下代碼,讓我們可以實時編輯迷宮,測試更加方便。

操作:點擊方格可以改變黑白狀態,按住alt點擊可以設置新的目標點。

逐漸把 solveMaze 里面的局部變量移到 NodeGraph 類里面,這樣外部訪問更加便利。注意當尋路結束的時候,不要結束函數,而是使用 while 循環一直等待新的目標點被設置:

// ... if (equalsNode(current, nodeGraph.endNode)) { while (equalsNode(current, nodeGraph.endNode)) {await sleep(1000) } continue }// ...優化尋路算法

想象一下這種情形:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

起點和終點一條直線,中間毫無阻擋,但是這個小人竟然到處跑,好一會才到終點,這樣下去不行的,必須要優化。

在 Node 類加一個屬性 endDistance 記錄每個節點到終點的距離,getDistance 函數根據坐標可以直接計算出距離,這個距離是沒有考慮到中間可能出現的障礙的,但對路線的評估也十分有用:

class Node { constructor (x, y, value) { this.x = x this.y = y this.value = value this.endDistance = 0 // 與終點的距離,忽略中間的障礙 this.checked = false this.parent = null this.nearNodes = [] }}function getDistance (nodeA, nodeB) { const x = Math.abs(nodeB.x - nodeA.x) const y = Math.abs(nodeB.y - nodeA.y) return (x + y)}

每次通過 popBestNextNode 方法從隊列取出 endDistance 最小的 Node:

class NodeGraph {// ... popBestNextNode () { let { queue } = this let bestNode = queue[0] let bestNodeIndex = 0 let { length } = queue for (let i = 0; i < length; i++) { let node = queue[i] if (node.endDistance < bestNode.endDistance) {bestNode = nodebestNodeIndex = i } } queue.splice(bestNodeIndex, 1) return bestNode }// ...}

既然有 endDistance,那也要有 beginDistance,用來記錄從起點走過來的步數。這個數值不直接從坐標計算,而是隨著前進累加,這樣 beginDistance 就不是估算值了,而是實際值:

// ...for (let node of current.nearNodes) { if (node.checked === false && node.value) {node.parent = currentnode.checked = truenode.endDistance = getDistance(node, nodeGraph.endNode)node.beginDistance = current.beginDistance + 1node.cost = node.endDistance + node.beginDistancenodeGraph.queue.push(node) }}// ...

考慮到以后可能會有新的因素加入,所以直接添加一個 cost 屬性,用來表達 成本。目前 cost 就是 endDistance + beginDistance,cost 越小,優先級越高。

Javascript結合Vue實現對任意迷宮圖片的自動尋路

像這樣的情況,小人一開始企圖從上方靠近,但是隨著不斷前進,經過的步數越來越多,倒不如走下面了,于是就放棄的上面的路線。

現在,小人的行動變成更加靠譜了:

對圖片進行尋路

拿這張我隨便畫的圖來作為參數:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

目標是從 B 點到達 E 點,我們只需要讀取這張圖片的像素,根據黑白顏色,轉換成為一個數組,放到 solveMaze 函數即可。

為此,需要有一個 input 標簽,type='file',用來選擇圖片,通過 URL.createObjectURL(File) 生成一個 URL,然后使用 new Image() 創建一個 img 標簽,它不需要添加進 body,把 url 給到 img.src。通過 CanvasRenderingContext2D.drawImage() 復制進 Canvas,再調用 CanvasRenderingContext2D.getImageData() 即可獲取像素數組。

這時不能再用 div 去渲染了,因為這張圖幾萬個像素,每個像素一個 div 的話,瀏覽器也吃不消,再加上將來圖片將會更大。

所以這里改用 Canvas 進行渲染,安排三個 Canvas,一個顯示迷宮的原圖,一個顯示探索過的節點,一個顯示當前最短路徑,也就是 path 數組里面的節點,然后把這三個 Canvas 疊在一起即可,最后就是在回調里面去更新后面兩個 Canvas 即可。

把我上面的圖片下載到自己電腦,點擊選擇文件按鈕選擇圖片,然后就能看到效果了,選別的圖片也可以,只是我的起點和終點坐標是寫死的,而且代碼沒有優化過,太大的圖片恐怕難以處理。

注意:如果遇到跨域問題那就要自己上傳圖片了。

自定義起始點,以及隨時變更路線

利用點擊事件中的 offsetX、offsetY 即可知道點擊坐標,把起點和終點的坐標保存起來,一旦有變化,則停止之前的尋路函數,重新執行當前的尋路函數,因此需要在循環中作一個判斷來決定是否退出函數,這件事情適合在回調里面做。

然后提供一個輸入框,自由調整經歷多少個循環才更新一次畫面,這樣能調整尋路的速度。

處理彩色圖片

預覽:https://codesandbox.io/s/maze-vite-8-h845p?file=/src/App.vue (注意如果出現跨域錯誤,就自己上傳圖片吧)

不放iframe了,感覺放太多了,讓這個頁面已經相當卡。

前面都是默認白色像素是可以行走的區域,現在嘗試把顏色相似的附近像素作為行走區域,這樣效果會更加好。

Javascript結合Vue實現對任意迷宮圖片的自動尋路

直接把 rgba 顏色數據傳入 solveMaze,然后在循環中計算出相鄰節點與當前節點的顏色差距,差距過大則不放入隊列。

把一個 rgba 整數的各個通道拆分開來可以這么寫:

/** * 獲取 Node 的 RGB 值 * @param {Node} node * @returns */function getNodeRGB (node) { let { value } = node let r = value & 0xFF let g = value >> 8 & 0xFF let b = value >> 16 & 0xFF return [ r, g, b ]}

求 rgb 顏色的相似度,最樸素的方法是把兩個顏色看成是兩個三維坐標的點,然后求其歐幾里得距離,但這不符合人眼的感知模型。詳細方法wiki已經有了:https://zh.wikipedia.org/wiki/顏色差異

關于這方面的運算有點復雜,我都寫到了 color.js 里面了。

結果:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

注意代碼里的 colorDiffThreshold,目前我用的 2.25,如果太高,會導致穿墻,太低則容易找不到路失敗。

性能優化

當點擊兩次畫面后,需要稍微等一會才會開始尋路,這里應該耗費了不少CPU。打開 DevTools 的性能分析器分析下到底是哪里消耗最多性能:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

很明顯 solveMaze 函數占據了大多數時間,展開下面的 Call Tree:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

buildNodeGraph 和 getNode 是優化重點,打開代碼,可以直接看到每句話耗費的CPU時間:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

57 行的 if (!node) {...} 明明是簡單的判斷,卻耗費了不少時間,試試看改成 node === undefined,并且 value 也不再需要判斷了。對 nodes 數組的訪問與讀取也耗費不少時間,嘗試一開始用 new Array(length) 初始化,應該會好一些。優化之后的代碼:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

看起來稍微好一些。

在尋路途中進行性能監測:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

發現 buildPath 相當的耗費時間,這也是理所應當的,畢竟每次循環都調用,并且完整遍歷整個鏈條。處理辦法也簡單,只在最后出結果時調用他即可,根據前面的經驗,while (node) 改為 while (node !== null)。

Javascript結合Vue實現對任意迷宮圖片的自動尋路

現在他完全沒有存在感了。

然后是 for...of 語句,建議改為傳統的數組下標自減,這是最快的,當然日常使用 for...of 可讀性更強。

Javascript結合Vue實現對任意迷宮圖片的自動尋路

然后是 popBestNextNode:

Javascript結合Vue實現對任意迷宮圖片的自動尋路

這里每次都完整遍歷整個數組找出cost最小的節點,最后還有一個數組元素移除的操作。我真的很難判斷 JavaScript 的數組到底是存儲在連續內存里面還是分散的,但是不管怎么樣,這里完全可以使用二叉堆替代來獲取更好的性能。具體就不自己實現了,直接用現成的:https://www.npmjs.com/package/heap-js。注意 new Heap() 的時候傳入自定義的比較器,然后把 popBestNextNode 的實現改為 return this.queue.pop() 即可。

最后,把 buildNodeGraph 的那兩層for循環全部移除,不再預先初始化所有的 Node,給 NodeGraph 添加一個新方法:

getNearNodes (node) { let { x, y } = node let up = this.getNode(x, y - 1) let down = this.getNode(x, y + 1) let left = this.getNode(x - 1, y) let right = this.getNode(x + 1, y) return [ up, down, left, right ].filter(node => node !== null) }

在后面的尋路循環中再去調用 getNearNodes 來獲取相鄰的節點,這樣就大幅縮減了一開始的卡頓了。

最后,提供兩種策略:

嚴格:當相鄰像素顏色差距小于某個值,才加入隊列。適合行走區域的顏色變化不大的圖片,得出的結果幾乎就是最短的路徑。 模糊:相鄰像素無論顏色的差距,都加入隊列,其差距值乘以某些系數,作為節點的 cost。適合任何圖片,最終總是能找到一條路。。。

let nearNodes = nodeGraph.getNearNodes(current)for (let i = nearNodes.length - 1; i >= 0; i--) { let node = nearNodes[i] if (node.checked === false) {node.checked = truelet colordiff = getNodeColorDiff(node, current)const colorDiffThreshold = 2 // 容許通過的顏色差異,范圍 0~100node.parent = currentnode.endDistance = getDistance(node, nodeGraph.endNode)node.beginDistance = current.beginDistance + 1if (mode === '1') { // 嚴格 node.cost = node.endDistance + node.beginDistance if (colordiff < colorDiffThreshold) {nodeGraph.queue.push(node) }} else if (mode === '2') { // 模糊 node.cost = node.endDistance + node.beginDistance + (colordiff * width * height) nodeGraph.queue.push(node)} }}

源代碼:https://gitee.com/judgeou/maze-vite

到此這篇關于Javascript結合Vue實現對任意迷宮圖片的自動尋路的文章就介紹到這了,更多相關Javascript結合Vue迷宮自動尋路內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 九色porny丨国产精品 | 精品欧美乱码久久久久久 | 日韩成人影院 | 欧美综合在线一区 | 欧美一区永久视频免费观看 | 深夜福利1000 | 欧美日韩一 | 7878www免费看片 | 91高清视频在线观看 | 欧美亚洲国产一区 | 成人精品鲁一区一区二区 | 成人免费视频网 | 久久久91 | 亚洲电影一区二区 | 天天草狠狠干 | 久久精品免费一区二区三区 | 在线免费视频一区二区 | 不卡一区| 欧美在线一区二区三区 | 亚洲二区视频 | 国产伦精品一区二区三区四区视频 | 午夜视频在线观看网站 | 草草久久久 | 毛片国产 | 色婷婷综合久久久中文字幕 | 成人在线看片 | 三区在线视频 | 国产精品乱码人人做人人爱 | 一a级毛片 | 亚洲人人 | 美女视频久久 | 亚洲精品永久免费 | 欧美亚洲另类丝袜综合网动图 | 一区二区精品 | 国产欧美日韩在线 | 欧美精品99| 日韩福利电影 | 精品免费国产视频 | 麻豆免费短视频 | 天天看天天摸天天操 | 成人免费一区二区三区视频网站 | 日韩国产精品一区二区三区 | 国产精品国产三级国产aⅴ原创 | 91嫩草在线| 91视频久久 | 91av免费在线观看 | 亚洲九九 | 国产精品亚洲视频 | 欧美在线综合视频 | 国产在线一区二区 | 2020国产在线 | 日韩五码 | 伊人热久久婷婷 | 亚洲久草在线 | 日韩一区二区在线观看 | 依人久久 | av电影手机在线看 | 亚洲精品二区三区 | 国产精品久久久久久久久久久久 | 成人精品在线 | 亚洲一区在线免费观看 | 午夜视频一区二区三区 | 欧美中文在线 | 久久精精品 | 日韩精品一区二 | 亚洲精品视频在线观看网站 | 国产精品久久久久久久久久99 | 日韩精品一区二区三区在线播放 | 中文字幕亚洲第一 | 日韩性精品 | 嫩草精品| 色资源站| 91.com在线| 国产精品一区二区三区免费 | 亚洲伊人久久综合 | 男人视频网站 | 国产精品美女久久久久久久久久久 | 久久精品欧美 | 亚洲一区中文字幕 | 国产综合亚洲精品一区二 | 国产精品中文字幕在线 | 欧美综合视频在线观看 | 久久国产成人 | 蜜桃一区 | 精品国产乱码久久久久久久软件 | 亚洲国产精品一区二区久久 | 色黄视频在线 | 四虎av成人 | 亚洲精品免费在线观看 | 婷婷在线视频 | 欧美日韩成人在线视频 | 久综合网| 日韩中文一区 | 亚洲日韩欧美一区二区在线 | 精品亚洲一区二区 | 一区二区三区四区在线 | 精品一区二区三区免费看 | av在线影院 | 国产精品久久久久久久久久妞妞 | 午夜家庭影院 | 成人免费观看男女羞羞视频 | 一区二区三区国产精品 | 久久久久国产 | 亚洲精品女优 | 亚洲欧美日本在线 | 欧美精品一区二区在线观看 | 国内久久 | 欧美日韩不卡视频 | 北条麻妃国产九九九精品小说 | 精品免费视频 | a视频在线 | 日韩无 | 在线天堂视频 | 日韩视频在线免费观看 | 男人的天堂久久 | 久久激情视频 | 一级篇| 亚洲三级视频 | 欧美日韩久久 | 日韩三级中文字幕 | 日本天天色 | 国产做a | 永久精品| 久久久国产精品一区 | 欧美激情在线精品一区二区三区 | 国产亚洲一区二区精品 | 欧洲一区二区在线观看 | 看特级毛片| 全黄大全大色全免费大片 | 亚洲免费视频在线观看 | 国产色在线 | 精品久 | 一级片在线观看网站 | 日韩中文字幕在线播放 | 免费视频99 | 亚洲国产欧美在线 | 91在线观看视频 | 日本在线观看网站 | 国产成人涩涩涩视频在线观看 | 伊人激情网 | 在线小视频| 亚洲成年人影院 | 一区二区三区精品视频 | 精品国产乱码久久久久久闺蜜 | 亚洲精品免费在线观看 | 国产成人久久精品一区二区三区 | 欧美午夜视频在线观看 | av一区二区在线观看 | 羞羞视频在线观看入口 | 97国产精品视频人人做人人爱 | 成人精品网站在线观看 | 特一级黄色片 | 亚洲成人日韩 | 欧美黑人一级爽快片淫片高清 | 涩涩天堂 | 精品久久久久久亚洲综合网 | 日韩成人一区二区 | 亚洲狠狠爱一区二区三区 | 99久久久久久 | 播放一区| 欧美一区二区三区免费视频 | 日韩在线不卡一区 | a级片网站 | 国产精品国产 | 亚洲伊人久久综合 | 一本大道综合伊人精品热热 | 国产精品无码久久久久 | www.日韩系列 | 国产精品国产a级 | 精品国产一区二区在线 | 中文在线一区 | 亚洲精品视频在线 | 国产一区影院 | 欧美精品一区二区三区蜜桃视频 | 91嫩草在线 | 精品1区| 国产一区不卡 | 久久精品欧美一区二区三区不卡 | 美女又黄又免费 | 羞羞视频免费观看入口 | 免费成人av网 | 大乳videos巨大吃奶 | 亚洲天堂电影网 | 999国产一区二区三区四区 | 国产亚洲一区二区三区在线 | 国产专区一区二区三区 | 久久久久久久91 | av网址在线播放 | 91精品国产欧美一区二区成人 | 欧美日韩国产综合视频 | 国产一区精品在线 | 欧美成人影院在线 | 久草高清在线 | 国产伦精品一区二区 | 91精品国产一区二区 | 少妇久久久久 | 亚洲第1页 | 国产免费成人 | 国产精品久久久久久一区二区三区 | 日本末发育嫩小xxxx | 国产精品久久一区 | 日日操综合 | 91精品国产综合久久国产大片 | 日韩一二三区视频 | 日本精品一区 | 国产91麻豆视频 | 日本三级不卡 | 日本在线观看 | 91精品视频在线播放 | 日韩一区二区在线观看视频 | 国产精品久久久久久久久久新婚 | 极品毛片| 日韩国产欧美一区 | 久久久久久久久久久久福利 | 日韩第1页 | 91丨九色丨国产 | 欧美精品1区| 久久777| 一区二区三区 在线 | 久久99影视| 精品国产乱码久久久久久闺蜜 | 久久久久国产精品 | 成年人在线看片 | 成人久久久精品乱码一区二区三区 | 中国一级大毛片 | 99re在线 | 日韩中文在线观看 | 伊人一区 | av网站在线免费观看 | 第一色视频 | 成人综合在线观看 | 成人免费福利 | 91麻豆精品国产91久久久更新资源速度超快 | 国产精品污www一区二区三区 | 国产在线成人 | 亚洲国产成人精品女人久久久 | 看毛片网| 欧美精品久久久久 | 日韩欧美精品一区二区三区 | 国产精品永久久久久久久久久 | 伊人影院久久 | 久久91精品久久久久久9鸭 | 欧美在线a | 国产视频一二三区 | 天天操夜夜操 | 亚洲成人久久久 | 国产一区二区精品在线观看 | h片观看 | 国产四区 | 99免费视频 | 久久99亚洲精品 | 午夜免费小视频 | 久久成人精品视频 | 综合久久久久 | 99精品欧美一区二区三区综合在线 | 日韩在线精品视频 | 福利电影在线 | 久久成人精品视频 | 久久久久国产精品一区二区 | 人人干人人干人人 | 久久久久久久国产精品 | av片网站| 久久99精品国产自在现线 | 91色站 | 国产欧美精品一区二区三区四区 | 欧美一级片在线 | 99精品国产高清一区二区麻豆 | 伊人激情网 | 国产视频导航 | 九一视频在线免费观看 | 久久精品一级 | 国内精品国产成人国产三级粉色 | av片在线观看 | 亚洲欧美精品 | 色中色综合 | 亚洲综合无码一区二区 | 国产精品久久久久久久久久久杏吧 | 国产精品夜夜春夜夜爽久久电影 | 亚洲夜幕久久日韩精品一区 | av网站在线免费观看 | 久久久久久一区 | 日韩成人在线视频 | 三级色黄 | 精品无码三级在线观看视频 | 在线国产视频 | 成人午夜sm精品久久久久久久 | 亚洲精品wwww | 亚洲一区二区三区免费视频 | 国产午夜视频 | 国产精品久久视频 | 久久久一区二区 | 亚洲国产婷婷香蕉久久久久久99 | 国产精品国产三级国产aⅴ原创 | 人人爽在线 | 国产一区二区三区不卡在线观看 | 久久久久久久国产精品 | 欧美成人a∨高清免费观看 在线视频成人 | 欧美一区二区三区国产精品 | 欧美成人a | 一区二区福利 | 99久久99久久精品国产片果冻 | 天天插天天操 | 日本不卡一区二区 | 免费视频久久久久 | 免费看性生交大片 | www在线看片 | 久久久久91 | 6080yy午夜一二三区久久 | 成年人毛片视频 | 黄色大片观看 | 日韩精品一区在线 | 综合久久99 | 国产精久 | 在线观看视频一区 | 日日碰碰 | 久久久国产精品入口麻豆 | 天天操导航 | 久久99国产一区二区三区 | 日韩精品不卡 | 国产欧美一区二区精品婷 | 日韩精品一区二区三区在线播放 | 亚洲视频一区二区三区四区 | 欧美精品一区二区三区在线播放 | 亚洲国产精品自拍 | 久久精品一 | 天堂资源 | 成人精品一区二区三区 | 成人国产精品久久 | 成人精品久久久 | 久久狠狠 | 久久精品国产一区二区三区不卡 | 欧美综合在线观看 | 欧美一区二区三区视频 | 成人在线播放 | 九九精品久久久 | 亚洲精品在线视频 | 精品成人一区二区 | 激情欧美一区二区三区中文字幕 | 欧美精品片| 久久久精品亚洲 | 久久精品亚洲精品 | 网址av| 天天操,夜夜操 | 成人免费福利视频 | 国产私拍视频 | 欧洲一区 | 国产一区二区三区四区在线观看 | 国家aaa的一级看片 操操操夜夜操 | 精品国产鲁一鲁一区二区在线观看 | 91tv亚洲精品香蕉国产一区 | 久久久久久久av | 91精品国产日韩91久久久久久 | 亚洲91精品 | 中文字幕日韩欧美 | 国产精品久久久久aaaa九色 | 中文字幕视频在线观看 | 久久99精品国产99久久6尤 | 亚洲国产精品久久久久秋霞蜜臀 | 日韩在线精品视频 | 欧美亚洲综合久久 | 91在线精品一区二区 | 久久精品亚洲精品国产欧美 | 黄色片在线 | 国产精品美女www爽爽爽动态图 | 国产精品久久在线观看 | 国产性×xxx盗摄xxxx | 簧片免费网站 | 欧美日韩中文字幕在线播放 | www.成人 | 久久久久久久av | 日韩中文字幕免费视频 | 亚洲精品久久 | 欧美久久久久 | 亚洲成人高清 | 成人免费一区二区三区视频网站 | 国产精品久久久久久久福利院 | 一区二区久久 | 亚洲视频在线播放 | 亚洲欧美中文日韩v在线观看 | 波多野结衣一二三 | 国产高清在线精品一区二区三区 | 亚洲综合大片69999 | 一区二区中文 | 在线视频自拍 | 日日骚| www.亚洲一区二区 | 男女做爰高清无遮挡免费视频 | 日日夜夜精品免费视频 | 91久久看片 | 国产超碰人人模人人爽人人添 | 国产区91 | 色婷婷一区二区三区四区 | 国产精品久久久一区二区 | 韩日中文字幕 | 日日操夜夜操免费视频 | 淫片一级国产 | 天天综合天天色 | 精品一区二区三区在线视频 | 韩国精品视频在线观看 | 午夜精品久久久久久99热软件 | 亚洲最大av网站 | 成人久久久精品乱码一区二区三区 | 99精品久久 | www成人精品 | 看亚洲a级一级毛片 | 免费观看在线午夜影视 | 国产欧美一区二区精品性色 | 日本黄色片免费 | 久久欧美精品 | 国产精品成人久久久久 | 精品国产一区二区三区日日嗨 | 日韩欧美精品一区二区三区 | 成人激情免费视频 | 91天堂| 久热亚洲 | 国产一区二区av | 亚洲不卡视频在线 | 草久在线视频 | 操操日 | 国产精品成人在线视频 | 91一区二区在线观看 | 97超碰自拍 | 精品av| 亚洲 欧美 另类 综合 偷拍 | 精品在线 | 欧美日韩免费一区二区三区 | 网站av| 日韩精品一区二区三区四区视频 | 国产日韩精品久久 | 国产综合久久 | 三级黄色片在线观看 | 少妇看av一二三区 | 亚洲午夜免费视频 | 亚洲精品一二三 | 99久久精品一区二区 | 91国内外精品自在线播放 | 国产成人精品一区二区三区视频 | 色免费在线观看 | 国产馆一区二区 | 午夜影院免费视频 | 国产精品第一 | 伊人网站 | 成人夜晚看av | 国产精品一二三区视频 | 在线中文字幕视频 | 色综合久久久 | 国产成人精品一区二区三区四区 | 国产传媒在线观看 | 九色91视频 | 一级片在线观看视频 | 欧美a v在线播放 | 亚洲国产激情 | 精品福利在线视频 | 久久国产视频精品 | 成视频年人免费看黄网站 | 天堂中文av在线 | 国产精品国产三级国产aⅴ中文 | 三级特黄特色视频 | 澳门av| 久久一本 | 欧美电影一区 | 中文字幕免费在线 | 久久久综合网 | 看特级毛片 | 亚洲精品视频大全 | 日韩欧美在线看 | 日本欧美久久久久免费播放网 | 日韩午夜 | 91在线视频一区 | 最近韩国日本免费观看mv免费版 | 玖玖国产精品视频 | 人人人人人你人人人人人 | 九九九九九九精品任你躁 | 国产精品久久久久久一区二区三区 | 欧美日韩亚洲另类 | 日本精品视频网站 | www.精品| 日本久久久久久 | 国产做a爰片久久毛片a我的朋友 | 日韩中文字幕在线观看 | 日韩精品久久 | 99久久精品免费看国产免费粉嫩 | 男女全黄一级一级高潮免费看 | 国厂黄色片 | 国产欧美一区二区三区在线看 | 免费观看欧美一级 | 国产一区2区 | 在线观看国产一区 | 亚洲男人的天堂在线观看 | 日韩成人不卡 | 毛片在线免费 | 在线观看亚洲大片短视频 | 精品一区二区三区免费 | 狠狠躁日日躁夜夜躁东南亚 | 久久99国产精品久久99大师 | 久久久久久亚洲 | 国产毛片视频 | 毛片毛片毛片毛片毛片毛片 | 国产一区二 | 久久91视频 | 一级片在线免费看 | 中文字幕亚洲第一 | 国产精品永久 | 亚洲国产精品网站 | 亚洲欧洲日韩在线 | 国产精品久久久久久久久久久久久久久久 | 91精品久久久久久综合五月天 | 久久久蜜桃一区二区人 | 欧美日本一区二区三区 | 国产精品美女久久久久久久久久久 | 国产特一级黄色片 | 精品一区av | 欧美日韩精品一区二区三区 | 国产成人影院 | 欧美日本韩国一区二区 | 亚洲va中文字幕 | 九九视频在线观看视频6 | 一级毛片大全免费播放 | 免费成人av在线 | 成人小视频在线观看 | 久久99精品久久久久久园产越南 | 欧美午夜精品久久久久久浪潮 | 亚洲精品a在线观看 | 成人免费视频在线观看 | 在线一区观看 | 91九色视频 | www.久久| 久久久久久久免费 | 日韩一二三区 | 亚洲欧美成人影院 | 午夜大片网 | 亚洲一区二区三区视频免费观看 | 麻豆网址 | 国产综合亚洲精品一区二 | 99国产精品久久久久久久 | 6080yy精品一区二区三区 | 国产精品成人久久久久 | 欧美一级二级三级视频 | 日韩中出 | 毛片91| 国产一区二区成人 | 久久丁香 | 国产精品一区二区三区四区五区 | 欧美激情自拍偷拍 | 久久网一区二区三区 | 国产精品视屏 | 精产国产伦理一二三区 | 国产精品久久久久aaaa九色 | 在线中文一区 | a久久 | 精品二区 | 日韩高清国产一区在线 | 欧美久久久久久 | 午夜午夜精品一区二区三区文 | 国产精品成人av | 看黄网址 | 成年人在线观看 | 电影午夜精品一区二区三区 | 欧美精品一区二区三区免费视频 | 日韩成人在线视频 | 久久国产美女 | 国产毛片一区二区 | 免费不卡视频 | 日韩有码在线观看 | 精品免费国产视频 | 一区二区三区不卡视频 | 日韩中文字幕免费视频 | av久久| 久久这里只有精品首页 | 一区二区三区免费视频网站 | 夜夜春精品视频高清69式 | 欧美日韩一区二区三 | av成人在线观看 | 久久久久久久av | 日韩中文一区二区三区 | 天天天综合网 | 伊人免费网 | 国产精品久久久久久久一区探花 | 天天插天天操天天干 | 91精品一区二区三区久久久久 | 神马香蕉久久 | 成人午夜精品一区二区三区 | 欧美视频免费在线 | 国产在线激情 | 国产精品亚洲区 | 国产精品久久久久久久午夜片 | 成人亚洲精品久久久久 | 国产区视频在线 | 欧美成人在线影院 | 在线久草| 国产高清免费视频 | 伊人狠狠干 | 日批的视频 | h免费观看 | 国产高清在线观看 | 亚洲精品视频在线看 | 蜜臀精品久久久久久蜜臀 | 日本高清视频网站 | 亚洲一区精品在线 | 久久久久中文 | 国产日韩欧美在线 | 中文字幕 亚洲一区 | 视频在线一区二区三区 | 欧美成人激情视频 | 国产99在线 | 欧美 | 在线观看视频91 | 亚洲欧美视频在线 | 亚洲特级| 亚洲视频 欧美视频 | 精品香蕉一区二区三区 | 一级做a爰片毛片 | 在线观看国产一区 | 亚洲国产视频一区 | 四虎永久网址 | 成人欧美一区二区三区黑人孕妇 |