Bạn chưa đăng nhập,
hãy nhấn vào đây để đăng nhập

12354663 người đang duyệt site , trong đó có 15468 thành viên
 
 

Tất cả các diễn đàn
Khoa học tự nhiên, kỹ thuật, công nghệ
 

Toán họcĐiện - Điện tử - Viễn thôngGiáo dục quốc phòngThiên văn họcCông nghệ Sinh họcVật lý họcHoá họcKhoa học công nghệ và môi trườngCơ khí - Tự động hoáXây dựngCâu lạc bộ kỹ sưKỹ thuật quân sự nước ngoài


   Toán học
 
  Điều kiện để 1 điểm nằm trong tam giác


 Chủ đề mới  Them cuoc Binh chon moi Trưng cầu mới
Trả lời Trả lời
 Gửi cho bạn của bạn  In ấn

    817 người đang xem chủ đề này, trong đó có 0 thành viên

<<Chủ đề trước...  Chủ đề tiếp theo>>



Tác giả Chủ đề này đã có 1401 lượt đọc và 9 bài trả lời  
  
Kidgunner
Give me a gun....



,Germany
Thành viên từ 01:10, 09/04/02


Đã được 12 người bình chọn (4.83)

Gửi tin nhắn Gửi thư  Thăm trang nhà của thành viên này
        Than phiền

Tớ phải viết 1 chương trình Java, trong đó điều kiện đưa vào là 1điểm toạ độ (x,y) phải nằm trong 1 tam giác có 3 đỉnh cho trước A(Xa,Ya); B(Xb,Yb), C(Xc,Yc); cái này quả thật tớ học qua lâu quá rồi ko còn nhớ nữa, vậy mong có bạn nào giúp đỡ, cám ơn rất nhiều.

Sáng chớm lạnh trong lòng Hà Nội


Những phố dài xao xác heo may


Người ra đi đầu không ngoảnh lại


Sau lưng thềm nắng lá rơi đầy

Gửi lúc 05:41, 12/06/05

Ironie


,France
Thành viên từ 19:51, 03/03/05


Đã được 1 người bình chọn (5.00)

Gửi tin nhắn Gửi thư  Thăm trang nhà của thành viên này
       Than phiền

Một điểm M nằm trong 1 tam giác ABC với điều kiện là định thức của các cặp vectơ (AM,AC),(BM,BA),(CM,CB) cùng dấu.
Để phòng trường hợp bạn không nhớ nốt, tớ định nghĩa luôn vectơ nối 2 điểm và định thức củ hai vectơ:
_ vectơ nối hai điểm A,B là : AB=(Xb-Xa,Yb-Ya)
_ định thức của hai vectơ U,V là : det(U,V)= Xu*Yv - Xv*Yu

Gửi lúc 22:08, 12/06/05Về đầu trang

Kidgunner
Give me a gun....



,Germany
Thành viên từ 01:10, 09/04/02


Đã được 12 người bình chọn (4.83)

Gửi tin nhắn Gửi thư  Thăm trang nhà của thành viên này
       Than phiền

Cám ơn bạn rất rất nhiều, ko có gì ngoài 5*, chúc bạn thành công!

Sáng chớm lạnh trong lòng Hà Nội


Những phố dài xao xác heo may


Người ra đi đầu không ngoảnh lại


Sau lưng thềm nắng lá rơi đầy

Gửi lúc 06:06, 13/06/05Về đầu trang

I_am_joking
I am looking for an internship in a gaming firm in India. Can you help me? I am not in Iraq.



,Iraq
Thành viên từ 01:36, 24/06/04


Đã được 16 người bình chọn (4.50)

Gửi tin nhắn Gửi thư  Thăm trang nhà của thành viên này
       Than phiền

Trích từ bài của Kidgunner viết lúc 05:41 ngày 12/06/2005:


Tớ phải viết 1 chương trình Java, trong đó điều kiện đưa vào là 1điểm toạ độ (x,y) phải nằm trong 1 tam giác có 3 đỉnh cho trước A(Xa,Ya); B(Xb,Yb), C(Xc,Yc); cái này quả thật tớ học qua lâu quá rồi ko còn nhớ nữa, vậy mong có bạn nào giúp đỡ, cám ơn rất nhiều.

[size=4][black]Sáng chớm lạnh trong lòng Hà Nội


[size=4][black]Những phố dài xao xác heo may


[size=4][black]Người ra đi đầu không ngoảnh lại


[size=4][black]Sau lưng thềm nắng lá rơi đầy



Có một thuật toán chung để xét xem 1 điểm có nằm trong 1 đa giác đơn (đa giác không tự cắt chính nó) hay không là từ điểm đó phóng ra 1 tia. Nếu tia này cắt 1 số lẻ cạnh của đa giác thì điểm kia nằm trong đa giác, số chẵn cạnh thì nó nằm bên ngoài đa giác. Tất nhiên phải xét đến những trường hợp đặc biệt khi mà tia phóng ra cắt các cạnh tại đỉnh.

IAJ

Gửi lúc 18:33, 15/06/05Về đầu trang

Ironie


,France
Thành viên từ 19:51, 03/03/05


Đã được 1 người bình chọn (5.00)

Gửi tin nhắn Gửi thư  Thăm trang nhà của thành viên này
       Than phiền

Trong trường hợp là đa giác bất kì không tự cắt thì phải dùng đến cách của bạn, nhưng đây là trường hợp đa giác lồi thì không cần phải dùng đến cách đó, cách của mình trong trường hợp đa giác lồi dễ viết chương trình hơn.

Gửi lúc 00:34, 16/06/05Về đầu trang

be_te


,Vietnam
Thành viên từ 12:05, 27/05/04


Đã được 4 người bình chọn (5.00)

Gửi tin nhắn Gửi thư  Thăm trang nhà của thành viên này
       Than phiền

Thân gửi Ironie:

"cách của mình trong trường hợp đa giác lồi ....."

=> xin thắc mắc 1 chút: làm sao mở rộng cách làm của bạn cho đa giác lồi bất kỳ ? Có phảI là đi 1 vòng theo chu vi, lấy 2 cạnh liên tiếp => định thức sẽ không đổi dấu !? Nếu vậy thì đúng là dễ lập trình thiệt

Tui rất thích cách giải này cho tam giác (và đa giác lồi) vì rất đơn giản

Còn cách của I_am_joking đề cập thì lại được xài trong thực tế hơn vì áp dụng được cho cả đa giác lõm

Tui xin thử nói sơ cho vui 1 cách mà tui nghĩ là áp dụng được cho đa giác bất kỳ (lồi, lõm, tự cắt):

Đi vòng theo chu vi, lấy 2 cạnh liên tiếp => tính góc đại số (có dấu) giữa 2 cạnh này => cộng dồn lại. Nếu điểm nằm trong đa giác thì tổng đại số (có dấu) của các góc đại số này sẽ là bội số của 360 độ; nếu điểm nằm ngoài thì tổng đại số sẽ là 0 (điểm nằm trên1cạnh/đỉnh sẽ là trường hợp riêng). Góc đại số là góc có dấu (giả sử qui ước: thuận chiều kim đồng hồ là dương, nghịch là âm)

bạn nào siêng thì xin kiểm chứng giùm (tui đã thử với hình ngôi sao 5 cánh)

(có gì sai sót xin các bạn chỉ giúp, cám ơn rất nhiều)

-thân


Gửi lúc 22:16, 17/06/05Về đầu trang

Ironie


,France
Thành viên từ 19:51, 03/03/05


Đã được 1 người bình chọn (5.00)

Gửi tin nhắn Gửi thư  Thăm trang nhà của thành viên này
       Than phiền

Uh, chỉ việc đi theo các cạnh rùi tính định thức thôi, rất đơn giản và dễ lập trình , cách dùng tia cũng rất hay nhưng vì phải tính thêm các trường hợp tia cắt các cạnh tại đỉnh nên độ phức tạp cao hơn một tí.
Tớ nghĩ là cách của bạn đúng, có phải là bạn tính góc đại số nhìn từ điểm đang xét tới các cạnh của đa giác không? Mình có thể tính giá trị của các góc này bằng hàm arcsin, cách này hay nhưng phải tính toán hơi nhiều (phải tính ra sin các góc rùi dùng hàm arcsin để tính ra các giá trị).

Gửi lúc 22:14, 18/06/05Về đầu trang

hoangvhung_sp


,Vietnam
Thành viên từ 20:36, 31/12/04


Đã được 1 người bình chọn (1.00)

Gửi tin nhắn Gửi thư  Thăm trang nhà của thành viên này
       Than phiền

<script language="JavaScript"><!--
function calc() {
if (fAB()*fBC()>0 && fBC()*fCA()>0) {
document.form1.out.value = "Inside"}
else {
document.form1.out.value = "Not Inside"}
}
function fAB() {
return (eval((document.form1.y.value-document.form1.y1.value)*
(document.form1.x2.value-document.form1.x1.value) -
(document.form1.x.value-document.form1.x1.value)*
(document.form1.y2.value-document.form1.y1.value)))
}
function fBC() {
return (eval((document.form1.y.value-document.form1.y2.value)*
(document.form1.x3.value-document.form1.x2.value) -
(document.form1.x.value-document.form1.x2.value)*
(document.form1.y3.value-document.form1.y2.value)))
}
function fCA() {
return (eval((document.form1.y.value-document.form1.y3.value)*
(document.form1.x1.value-document.form1.x3.value) -
(document.form1.x.value-document.form1.x3.value)*
(document.form1.y1.value-document.form1.y3.value)))
}
// --></script>

Gửi lúc 02:02, 23/06/05Về đầu trang

hoangvhung_sp


,Vietnam
Thành viên từ 20:36, 31/12/04


Đã được 1 người bình chọn (1.00)

Gửi tin nhắn Gửi thư  Thăm trang nhà của thành viên này
       Than phiền

Thuật toán tham khảo thêm tại đây :
http://mcraefamily.com/MathHelp/GeometryPointAndTriangle2.htm

Gửi lúc 02:04, 23/06/05Về đầu trang

Kidgunner
Give me a gun....



,Germany
Thành viên từ 01:10, 09/04/02


Đã được 12 người bình chọn (4.83)

Gửi tin nhắn Gửi thư  Thăm trang nhà của thành viên này
       Than phiền

Trích từ bài của hoangvhung_sp viết lúc 02:04 ngày 23/06/2005:


Thuật toán tham khảo thêm tại đây :
http://mcraefamily.com/MathHelp/GeometryPointAndTriangle2.htm




Cũng đuợc nhưng hình như cái cách làm này hơi dài thì phải, tớ đã viết đoạn Code Java theo cách của bạn Ironie và nó đơn giản hơn nhiều:
boolean ok= true;
do
{
(.....)
double det1 = (startPunkt[ 0] - eckePunktX[ 0]) * (eckePunktY[ 2] - eckePunktY[ 0]) - (eckePunktX[ 2] - eckePunktX[ 0]) * (startPunkt[ 1] - eckePunktY[ 0]);
double det2 = (startPunkt[ 0] - eckePunktX[ 1]) * (eckePunktY[ 0] - eckePunktY[ 1]) - (eckePunktX[ 0] - eckePunktX[ 1]) * (startPunkt[ 1] - eckePunktY[ 1]);
double det3 = (startPunkt[ 0] - eckePunktX[ 2]) * (eckePunktY[ 1] - eckePunktY[ 2]) - (eckePunktX[ 1] - eckePunktX[ 2]) * (startPunkt[ 1] - eckePunktY[ 2]);
if ( det1 >= 0 && det2 >= 0 && det3 >= 0 ) ok=true;
else if ( det1 < 0 && det2 <0 && det3 < 0 ) ok=true;
else {
System.out.println(" StartPunkt ist nicht in der Dreieck, geben Sie noch mal ein! "); //điểm ko nằm trong tam giác
ok=false;

}
}
while (ok==false);
Tớ dùng tiếng Đức nhưng nói chung là tớ gán 3 toạ độ x và 3 toạ độ y vào 2 mảng eckePunkt. (...) là nhập toạ độ các điểm.
1 lần nữa cảm ơn bạn Ironie.

Sáng chớm lạnh trong lòng Hà Nội


Những phố dài xao xác heo may


Người ra đi đầu không ngoảnh lại


Sau lưng thềm nắng lá rơi đầy

Gửi lúc 06:11, 28/06/05Về đầu trang

 
Các chủ đề liên quan

Đề nghị các bạn tuân thủ qui định của diễn đàn khi gửi bài lên diễn đàn. Để bảo vệ diễn đàn, các bạn hãy thông báo với ban quản trị khi thấy các bài vi phạm qui định bằng cách ấn vào biểu tượng ở bên cạnh mỗi bài.

Trang chủ |  Đăng ký |  Các diễn đàn |  TTVN Life |  Chủ đề mới |  Bài gần đây |  Tìm kiếm |   Sự kiện |  Sổ lưu niệm |  Từ điển |  Download  |   Thành viên |   Trưng cầu  |  Hướng dẫn |  Trang cá nhân |  Sửa thông tin riêng |  Danh sách bạn |  Các đánh dấu |  Ai đang làm gì?

Trai tim Viet Nam Online (c) 2000-2003 TTVNOL Friends Group.

Sử dụng phần mềm TTVNOnline Forum .NET 8.1, Snitz Forum 2000


3.5016128