# Week 5 ## Scenarios ### Scenario 1:行程規劃 #### 使用者 - 宜臻,一位剛畢業的大學生,決定和朋友一起安排暑假的花蓮四日旅遊。 #### 流程 - 宜臻坐在書桌前,使用平板開啟「旅遊小幫手」App。 - 她點選主畫面的「AI 行程規劃」圖示。 - 系統切換至設定頁面,她輸入: - 出發地:「台北」 - 目的地:「花蓮」 - 天數:「4天」 - 日期:「7月5日~7月8日」 - 偏好:「自然風景」、「歷史建築」 - 點擊「開始規劃」,系統顯示提示「為您規劃中……」。 - 幾秒後,畫面顯示四日行程,包括每個景點卡片、圖片、推薦時間與交通安排。 - 在行程頁面上方,出現「導覽模式」選單,提供三個導覽選項按鈕: - 「語音導覽」:啟動自動播放全行程景點語音解說 - 「VR 導覽」:開啟虛擬實境模式,預覽景點場景與導覽資訊 - 「AR 導覽」:按鈕呈現灰階,標註「需到達現場方可使用」 - 她點選「語音導覽」: - 系統依照第一天景點順序開始播放語音介紹內容。 - 接著她點選「VR 導覽」: - 畫面切換至景點 360° 模式,可自由旋轉觀看建築與環境。 - 可左右滑動切換各個景點的 VR 導覽。 - 她點選第一天的「松園別館」卡片,進入詳細資訊頁面,查看: - 景點介紹 - 熱門評論摘要(由 AI 歸納) - 圖片與實用資訊(開放時間、交通方式等) - 點選「← 返回」,她回到行程卡片瀏覽模式。 - 她發現「花蓮文化創意產業園區」排在第一天晚上過於普通,點選右上角垃圾桶圖示。 - 系統彈出確認:「是否刪除此行程?將重新計算路線與時間」→ 她點選「確定」 - 景點被移除,系統即時重排路線與交通時間。 - 她覺得「七星潭」更適合第一天下午: - 點選「編輯行程」→ 長按「七星潭」卡片 → 拖曳至第一天下午。 - 放手後畫面更新順序與地圖路線。 - 她想到朋友推薦的「石梯坪」: - 點選「新增景點」→ 輸入「石梯坪」→ 點擊加入 → 選擇加入「第二天下午」。 - 景點成功加入行程,系統更新路線與預估交通時間。 - 修改完成後,宜臻檢視行程頁面,確認內容無誤。 - 她點選畫面下方的「完成規劃」按鈕。 - 系統跳出視窗提示是否匯出行程 → 她點選「產生分享連結」,將連結傳送給好友小嵐,一起準備花蓮小旅行。 - 她點選畫面左上角的「← 返回」,回到主畫面。 - 系統在「您的行程」顯示「花蓮四日遊」的行程標題卡片,方便她之後繼續編輯或導覽。 ## 介面           ## Use case models Use Case: Planning and Landmark Navigation(行程規劃) Participating Actors(參與角色): 1. 使用者(如旅遊規劃者、學生、觀光客) 2. AI 規劃模組 2. 導覽模組 Entry Condition(開始情況): 使用者已開啟 App,並選擇「AI 行程規劃」功能。 Flow of Events(事件流程): 1. 使用者啟動 App,點選「AI 行程規劃」。 2. 使用者可以輸入出發地、目的地、日期、天數與偏好類型。 3. 使用者確認資料後,點選「開始規劃」。 4. 系統生成行程卡片,包含景點、交通建議與時間安排。 5. 使用者可以檢視、編輯或新增景點。 6. 使用者可以在行程中選擇「地標導覽」模式。 7. 使用者可以在「地標導覽」模式選擇「語音導覽」、「VR 導覽」「AR 導覽」 8. 系統根據使用者選擇的導覽方式開始進行導覽。 9. 使用者完成行程編輯後,點選「完成規劃」,行程儲存,並返回主頁。 Exit Condition(結束情況): 行程成功儲存且可供存取或分享。 地標導覽順利完成,返回行程頁或主畫面。 Exceptions(例外狀況): 1. 網路中斷,無法下載或更新行程/景點資訊。 2. 相機或 AR 模組無法啟動(如未開啟相機權限)。 3. GPS 定位失敗,導致無法正確導覽。 4. 景點資料庫缺少地標或無法推薦。 Nonfunctional Requirements(非功能性需求): 1. 使用介面直覺與快速反應:介面須具備高直覺性,操作反應時間短。 2. 高效能行程規劃:行程規劃作業須於 5 秒內完成。 3. 多語系支援:支援中英文操作介面,語音導覽須支援在地語言與離線使用。 4. 資訊計算準確性:行程與路線計算、景點資訊與交通時間需具備高準確度。 5. AR 模組穩定性:需支援即時影像辨識與穩定浮動資訊顯示。 6. 戶外環境適應性:UI/UX 設計應適應戶外強光,避免使用困難。 ## Class identification from use case models ### 文字分析得到的類別圖和Data dictionary | Example | Part of speech | UML model component | 型態 | 說明 | | ---------------- | -------------- | ------------------------------------------- | ------- | ------------------------------------------------ | | 使用者 | 名詞 | class `User` | class | 使用此 App 的人 | | 行程 | 名詞 | class `Itinerary` | class | 由多個景點及時間安排組成的旅遊計畫 | | 景點 | 名詞 | class `Attraction` | class | 行程中的單一觀光地點 | | 系統 | 名詞 | class `TravelAssistantSystem` | class | 負責行程規劃與導覽的核心模組 | | 語音導覽 | 名詞 | class `VoiceGuide` | class | 播放行程語音講解的模組 | | VR 導覽 | 名詞 | class `VRGuide` | class | 提供虛擬實境景點預覽的模組 | | AR 導覽 | 名詞 | class `ARGuide` | class | 提供擴增實境現場導覽的模組 | | 行程卡片 | 名詞 | class `ItineraryCard` | class | 顯示每日景點與時間的視覺化卡片 | | 掃描框 | 名詞 | class `ScanFrame` | class | AR 導覽時提示對準地標的框架 | | 浮動資訊框 | 名詞 | class `FloatingInfoBox` | class | 顯示地標資訊並播放語音的浮動視窗 | | 公開景點資訊 | 名詞 | class `PublicAttraction` | class | 存放從官方來源獲取的景點詳細資料 | | 個人景點備註 | 名詞 | class `PrivateAttraction` | class | 存放使用者個人對景點的筆記或標記 | | 出發地 | 形容詞 | `Itinerary.startLocation` | String | 行程的起點城市或地點 | | 目的地 | 形容詞 | `Itinerary.destination` | String | 行程的終點城市或地點 | | 天數 | 形容詞 | `Itinerary.days` | Date | 行程持續的天數 | | 日期區間 | 形容詞 | `Itinerary.dateRange` | DateTime | 行程的開始與結束日期 | | 行程標題 | 形容詞 | `Itinerary.title` | String | 行程的名稱或標題 | | 偏好 | 形容詞 | `User.preference` | String | 使用者偏好的景點類型 | | 使用者編號 | 形容詞 | `User.userID` | String | 使用者的唯一識別編號 | | 圖片 | 形容詞 | `ItineraryCard.image` | Blob | 行程卡片中展示的景點圖片 | | 交通資訊 | 形容詞 | `ItineraryCard.transportationInfo` | String | 建議的交通方式與時間 | | 推薦時間 | 形容詞 | `ItineraryCard.displayTime` | DateTime | 推薦造訪景點的時間 | | 景點評論摘要 | 形容詞 | `Attraction.reviewSummary` | String | AI 歸納的使用者評論摘要 | | 實用資訊 | 形容詞 | `Attraction.practicalInfo` | String | 景點的開放時間與交通指引 | | 行程細節 | 形容詞 | `Itinerary.details` | String | 行程的完整描述或備註 | | 行程順序 | 形容詞 | `ItineraryCard.order` | Integer | 卡片在行程中的顯示順序 | | 景點順序 | 形容詞 | `Itinerary.attractionOrder` | Integer | 景點在行程中的排序 | | 評論來源 | 形容詞 | `Attraction.reviewSource` | String | 評論內容的來源平台 | | 使用者地點 | 形容詞 | `User.currentLocation` | String | 使用者當前所在位置 | | 搜尋 | 動詞 | `TravelAssistantSystem.searchAttractions()` | Attraction | 根據使用者偏好搜尋推薦景點 | | 確認行程 | 動詞 | `TravelAssistantSystem.confirmItinerary()` | void | 保存並確認最終行程 | | 匯出行程 | 動詞 | `TravelAssistantSystem.exportItinerary()` | PDF | 匯出行程文件 | | 播放語音 | 動詞 | `VoiceGuide.play()` | Blob | 播放語音導覽內容 | | 顯示資訊 | 動詞 | `Attraction.displayInfo()` | String | 顯示景點詳細資訊 | | 新增景點 | 動詞 | `Itinerary.addAttraction()` | void | 在行程中新增指定景點 | | 刪除行程 | 動詞 | `Itinerary.removeAttraction()` | void | 從行程中移除指定景點 | | 拖曳排序 | 動詞 | `Itinerary.reorder()` | void | 重新排列行程中景點順序 | | 啟用鏡頭導覽 | 動詞 | `ARGuide.activateCamera()` | void | 啟動裝置相機進入 AR 模式 | | 偵測實體定位 | 動詞 | `ARGuide.detectLocation()` | String | 透過 GPS 定位使用者位置並回傳 | | 播放 VR 導覽 | 動詞 | `VRGuide.play()` | Blob | 進入並播放 360° 虛擬導覽 | | 切換景點 | 動詞 | `VRGuide.switchScene()` | void | 在不同景點的 VR 模式間切換 | | 掃描建築 | 動詞 | `ARGuide.scanLandmark()` | String | 辨識並掃描真實世界中的地標 | | 播放資訊卡片語音 | 動詞 | `FloatingInfoBox.playVoice()` | Blob | 透過浮動資訊框播放語音 | | 自動偵測定位 | 動詞 | `ARGuide.autoDetectLocation()` | String | 持續追蹤並更新使用者位置 | | 顯示浮動資訊 | 動詞 | `FloatingInfoBox.display()` | void | 顯示地標相關文字與圖片 | | 更新景點資訊 | 動詞 | `PublicAttraction.updateOfficialInfo()` | void | 更新官方來源提供的景點資料 | | 編輯景點註記 | 動詞 | `PrivateAttraction.editPersonalTag()` | void | 編輯使用者對景點的個人標記 | | 計算路徑 | 動詞 | `TravelAssistantSystem.calculateRoutes()` | String | 根據景點來規劃路徑 | <!--  -->ㄐㄐ ### 類別圖關聯性  <!--  -->  <!-- 這是UML的程式碼 https://hackmd.io/DYC4KcXRSLapJJCFEDjsXQ  --> ### Sequence diagrams <!----> <!--  -->  <!--https://hackmd.io/@9XTl2igKQWK7JQmLq_2DNw/B1BTC80yel--> ### Activity Diagrams <!--    -->  <!--  --> <!--    --> <!--  -->
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up