Rumah  >  Soal Jawab  >  teks badan

javascript - Bagaimana untuk menentukan sama ada titik berada dalam segitiga dalam js?

Apakah formula matematik yang digunakan?

巴扎黑巴扎黑2687 hari yang lalu1358

membalas semua(3)saya akan balas

  • 滿天的星座

    滿天的星座2017-06-12 09:31:32

    Soalan yang sangat biasa dalam geometri pengiraan

    Ada △ABC,以及点O(x, y), biarkan koordinat bucu segi tiga ialah: A(x1,y1), B(x2,y2), C(x3,y3)

    Titik O berada dalam △ABC, dan titik O dan titik C berada pada sisi yang sama bagi garis lurus AB, kemudian:

    [(x-x1)(y2-y1) - (y-y1)(x2-x1)][(x3-x1)(y2-y1) - (y3-y1)(x2-x1)] > 0

    Begitu juga, titik O dan titik B berada pada sisi yang sama bagi garis lurus AC;

    Jika tiga syarat di atas dipenuhi, titik O berada dalam △ABC.


    Secara peribadi, saya lebih suka kaedah ini kerana ia hanya mengandungi empat operasi aritmetik dan pertimbangan saiz, dan tidak melibatkan operasi seperti fungsi trigonometri dan punca kuasa dua, jadi ia lebih pantas. Jika ada cara yang lebih baik, sila beri nasihat.

    balas
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:31:32

    Boleh diproses melalui sistem koordinat Barycentric.
    Pautan rujukan: https://en.wikipedia.org/wiki...

    Andaikan titik yang akan diuji ialah (x0, y0), dan tiga titik segitiga ialah (x1, y1), (x2, y2), (x3, y3)

    Mengikut takrifan koordinat pusat graviti:

    x0 = a * x1 + b * x2  + c * x3
    y0 = a * y1 + b * y2 + c * y3
    a + b + c = 1

    di mana a b c ialah tiga pekali masing-masing. Jika dan hanya jika a b c kedua-duanya lebih besar daripada atau sama dengan 0 dan kurang daripada atau sama dengan 1, titik (x0, y0) berada dalam segi tiga yang dibentuk oleh titik (x1, y1), titik (x2, y2) dan titik ( x3, y3).

    Dari definisi di atas, kita boleh mendapatkan penyelesaian a b c:

    a = ((y2 - y3)*(x0 - x3) + (x3 - x2)*(y0 - y3)) / ((y2 - y3)*(x1 - x3) + (x3 - x2)*(y1 - y3))
    b = ((y3 - y1)*(x0 - x3) + (x1 - x3)*(y0 - y3)) / ((y2 - y3)*(x1 - x3) + (x3 - x2)*(y1 - y3))
    c = 1 - a - b

    Ditulis dalam kaedah JS:

    function pointInTriangle(x0, y0, x1, y1, x2, y2, x3, y3) {
      var pisor = (y2 - y3)*(x1 - x3) + (x3 - x2)*(y1 - y3);
      var a = ((y2 - y3)*(x0 - x3) + (x3 - x2)*(y0 - y3)) / pisor;
      var b = ((y3 - y1)*(x0 - x3) + (x1 - x3)*(y0 - y3)) / pisor;
      var c = 1 - a - b;
    
      return a >= 0 && a <= 1 && b >= 0 && b <= 1 && c >= 0 && c <= 1
    }

    balas
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:31:32

    Ini bukan mudah
    Sebagai contoh, titik x mempunyai tiga sudut a, b, dan c segitiga
    x ialah bucu sudut Jika hasil tambah bagi tiga sudut
    axb bxc cxa ialah 360 darjah, maka titik x. berada dalam segi tiga

    Terdapat banyak artikel
    Cari mereka
    http://www.cnblogs.com/baie/a...

    balas
    0
  • Batalbalas