1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hỏi đáp [Solved] Lấy tọa độ giao nhau của 2 vùng tọa độ

Thảo luận trong 'Thảo luận chung - Hỏi đáp' bắt đầu bởi yutijang, 9/1/19.

  1. yutijang

    yutijang Thành viên
    • 18/23

    Tham gia ngày:
    1/7/18
    Bài viết:
    69
    Đã được thích:
    51
    Xin chào,
    Mình có vấn đề như vầy,
    Mình có 2 chuỗi, là tọa độ của khu vực tìm ảnh trong ImageSearch,
    Mình muốn lọc lấy tọa độ khu vực giao nhau lớn nhất của 2 khu vực trên,
    [​IMG]
    Mình có viết đoạn code lọc như vầy:
    Mã (AutoIt):
    Local $iRegion[4]

    Local $sString1 = "1019,28,1088,97"
    Local $sString2 = "700,0,800,80"

    Local $aArray1 = StringRegExp($sString1, "(?i)([0-9]+)", 3)
    Local $aArray2 = StringRegExp($sString2, "(?i)([0-9]+)", 3)

    For $i = 0 To 1
        $iRegion[$i] = (Number($aArray1[$i]) <= Number($aArray2[$i])) ? Number($aArray1[$i]) : Number($aArray2[$i])
    Next

    For $i = 2 To 3
        $iRegion[$i] = (Number($aArray1[$i]) >= Number($aArray2[$i])) ? Number($aArray1[$i]) : Number($aArray2[$i])
    Next

    Local $iLeft = $iRegion[0], $iTop = $iRegion[1], $iRight = $iRegion[2], $iBottom = $iRegion[3]

    MsgBox(0, "", $iLeft & "," & $iTop & "," & $iRight & "," & $iBottom)
    Cho mình hỏi là có cách nào khác sao cho tối ưu hơn, code ngắn hơn không?
    Xin cám ơn trước nếu được sự giúp đỡ!

    Cám ơn đã đọc!
     
  2. vucapuchinp

    vucapuchinp Thành viên mới
    • 3/6

    Tham gia ngày:
    21/11/16
    Bài viết:
    21
    Đã được thích:
    7
    #include <Array.au3>
    Local $sString1 = "675, 73, 804, 169"
    Local $sString2 = "98, 312, 291, 431"

    $sString1 = StringSplit($sString1,",")
    $sString2 = StringSplit($sString2,",")
    Local $result[4]
    For $i = 1 To 4
    $result[$i-1] = ($sString1[$i] < $sString2[$i]) ? $sString2[$i] : $sString1[$i]
    Next
    _ArrayDisplay($result)
    [​IMG]
     
    yutijang thích bài này.
  3. yutijang

    yutijang Thành viên
    • 18/23

    Tham gia ngày:
    1/7/18
    Bài viết:
    69
    Đã được thích:
    51
    @vucapuchinp Xin cám ơn! :) (y)

    P/S: Code của bạn nó không ra đúng khu vực lớn nhất bao gồm 2 khu vực 1 và 2

    Với tọa độ như vầy thì code của bạn chạy không đúng, nó không lọc ra tọa độ vùng lớn nhất, bao bọc 2 vùng kia:
    Local $sString1 = "100,200,250,280"
    Local $sString2 = "800,800,820,830"
     
    Chỉnh sửa cuối: 10/1/19
  4. vucapuchinp

    vucapuchinp Thành viên mới
    • 3/6

    Tham gia ngày:
    21/11/16
    Bài viết:
    21
    Đã được thích:
    7
    hihi. sorry bác. iêm đã sửa lại. và đây là code mới.
    Mã (AutoIt):
    Local $sString1 = "100,200,250,280"
    Local $sString2 = "50,100,820,830"

    $sString1 = StringSplit($sString1,",")
    $sString2 = StringSplit($sString2,",")
    Local $result[4]
    For $i = 1 To 4
        $result[$i-1] = ($sString1[$i] + $sString2[$i] + Abs($sString1[$i] - $sString2[$i]) * ($i>2 ? +1 : -1))/2
    Next
    _ArrayDisplay($result)
     
    yutijang thích bài này.
  5. yutijang

    yutijang Thành viên
    • 18/23

    Tham gia ngày:
    1/7/18
    Bài viết:
    69
    Đã được thích:
    51
    Cám ơn bạn rất nhiều! :)
    Tìm thử trên mạng thì ra đây chỉ là kiến thức toán lớp 4 :D tuyệt vời!
     

Chia sẻ trang này

Đang tải...