Rumah > Soal Jawab > teks badan
Apakah formula matematik yang digunakan?
滿天的星座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.
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
}
漂亮男人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...