Đến nội dung


Hình ảnh
- - - - -

Hỏi: Cách nội suy tâm đường tròn 3D


  • Please log in to reply
58 replies to this topic

#1 duyminh86

duyminh86

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 10 December 2010 - 02:55 PM

Trước tiên mình xin gửi lời chào tới các thành viên 4rum. Mình là thành viên mới và mình có một vướng mắc trong công việc mong mọi người giúp mỉnh.

Vấn đề của mình là cần phải nội suy tâm trường tròn từ n điểm cho trước (trong mặt phẳng và trong không gian) một cách nhanh nhất (như là dùng autolisp)

Bình thường mình phải vẽ đường tròn qua lần lượt qua 3 điểm một rồi lại vẽ tiếp đường tròn qua 3 tâm của các đường tròn đã vẽ. Sau cùng lấy được tâm nội suy tương đối của n điểm đó. Nhưng cách này rất mất thời gian.

Mong các bro giúp đỡ
  • 0

#2 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 10 December 2010 - 03:27 PM

Trước tiên mình xin gửi lời chào tới các thành viên 4rum. Mình là thành viên mới và mình có một vướng mắc trong công việc mong mọi người giúp mỉnh.

Vấn đề của mình là cần phải nội suy tâm trường tròn từ n điểm cho trước (trong mặt phẳng và trong không gian) một cách nhanh nhất (như là dùng autolisp)

Bình thường mình phải vẽ đường tròn qua lần lượt qua 3 điểm một rồi lại vẽ tiếp đường tròn qua 3 tâm của các đường tròn đã vẽ. Sau cùng lấy được tâm nội suy tương đối của n điểm đó. Nhưng cách này rất mất thời gian.

Mong các bro giúp đỡ

Chào cả nhà!
Có thể không tồn tại đường tròn từ n điểm cho trước, nhưng chắc chắn tồn tại 1 đường tròn qua 3 điểm cho truớc.
Đây là bài toán hình học lớp 7 : tâm của đường tròn ngoại tiếp tam giác (giao của 2 đuờng trung trực).

Nội suy từ n điểm :
- chia n điểm thành các tập ba điểm
- tìm tâm của các tập ba điểm này.
- nội suy tương đối của n/3 các tâm này (quy luật ?!) :undecided:
Bác nào có thời gian viết LISP giùm bạn duyminh86 nào !
  • 0

#3 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 10 December 2010 - 03:47 PM

Trước tiên mình xin gửi lời chào tới các thành viên 4rum. Mình là thành viên mới và mình có một vướng mắc trong công việc mong mọi người giúp mỉnh.

Vấn đề của mình là cần phải nội suy tâm trường tròn từ n điểm cho trước (trong mặt phẳng và trong không gian) một cách nhanh nhất (như là dùng autolisp)

Bình thường mình phải vẽ đường tròn qua lần lượt qua 3 điểm một rồi lại vẽ tiếp đường tròn qua 3 tâm của các đường tròn đã vẽ. Sau cùng lấy được tâm nội suy tương đối của n điểm đó. Nhưng cách này rất mất thời gian.

Mong các bro giúp đỡ

Hề hề hề,
Không hiểu ý bác này ra sao cả. Nếu có n điểm sẽ có Tổ hợp chập 3 các nhóm 3 điểm trong n điểm đó. Vậy phải vẽ cả chừng đó vòng tròn hay sao???
Sau đó lại tổ hợp chập 3 của các tâm này ư??? Và cứ thề đến khi nào hỉ???
Tốt nhất là bác phải post một cái hình cụ thể về cái phương pháp mà bác đã làm lên để mọi người ngâm cứu mới được.
Hề hề hề....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#4 NguyenNdait

NguyenNdait

    biết vẽ line

  • Members
  • PipPip
  • 28 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 10 December 2010 - 04:05 PM

Hề hề hề,
Không hiểu ý bác này ra sao cả. Nếu có n điểm sẽ có Tổ hợp chập 3 các nhóm 3 điểm trong n điểm đó. Vậy phải vẽ cả chừng đó vòng tròn hay sao???
Sau đó lại tổ hợp chập 3 của các tâm này ư??? Và cứ thề đến khi nào hỉ???
Tốt nhất là bác phải post một cái hình cụ thể về cái phương pháp mà bác đã làm lên để mọi người ngâm cứu mới được.
Hề hề hề....

Xin nói thêm : số đường tròn đi qua 3 điểm trong 30 điểm cho trước đã là : C(3,30)=(30! / 3! x 27!)=4060
Nếu cho trước chừng 100 điểm thì nhiều lắm. Đề nghị chủ 2pic nói lại cho rõ ý.
  • 0

Mầm non phường ba - Đây ta mầm cụ
Lãnh tụ non sông - Ngộ không.


#5 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 10 December 2010 - 04:12 PM

Hề hề hề,
Không hiểu ý bác này ra sao cả. Nếu có n điểm sẽ có Tổ hợp chập 3 các nhóm 3 điểm trong n điểm đó. Vậy phải vẽ cả chừng đó vòng tròn hay sao???
Sau đó lại tổ hợp chập 3 của các tâm này ư??? Và cứ thề đến khi nào hỉ???
Tốt nhất là bác phải post một cái hình cụ thể về cái phương pháp mà bác đã làm lên để mọi người ngâm cứu mới được.
Hề hề hề....

Hê hề Chào Bác!
Ý của gia_bach là:
Ví dụ có 30 điểm thì chia 30 điểm này thành 10 cặp mỗi cặp 3 điểm. lấy tâm của từng cặp này như vậy là từ 30 điểm còn lại 10 điểm. làm tiếp đến khi còn 1 điểm. Nhưng em thấy tư duy như vậy là bị sai rồi hê hê.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#6 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 10 December 2010 - 04:19 PM

Hê hề Chào Bác!
Ý của gia_bach là:
Ví dụ có 30 điểm thì chia 30 điểm này thành 10 cặp mỗi cặp 3 điểm. lấy tâm của từng cặp này như vậy là từ 30 điểm còn lại 10 điểm. làm tiếp đến khi còn 1 điểm. Nhưng em thấy tư duy như vậy là bị sai rồi hê hê.

...........
Nội suy từ n điểm :
- chia n điểm thành các tập ba điểm
- tìm tâm của các tập ba điểm này.
- nội suy tương đối của n/3 các tâm này (quy luật ?!) :undecided:
Bác nào có thời gian viết LISP giùm bạn duyminh86 nào !

Hề hề ....
Chúc các bác cuối tuần zui zẻ ! :wub:
  • 0

#7 duyminh86

duyminh86

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 10 December 2010 - 05:06 PM

Chào cả nhà!
Có thể không tồn tại đường tròn từ n điểm cho trước, nhưng chắc chắn tồn tại 1 đường tròn qua 3 điểm cho truớc.
Đây là bài toán hình học lớp 7 : tâm của đường tròn ngoại tiếp tam giác (giao của 2 đuờng trung trực).

Nội suy từ n điểm :
- chia n điểm thành các tập ba điểm
- tìm tâm của các tập ba điểm này.
- nội suy tương đối của n/3 các tâm này (quy luật ?!) :undecided:
Bác nào có thời gian viết LISP giùm bạn duyminh86 nào !



Hề hề hề,
Không hiểu ý bác này ra sao cả. Nếu có n điểm sẽ có Tổ hợp chập 3 các nhóm 3 điểm trong n điểm đó. Vậy phải vẽ cả chừng đó vòng tròn hay sao???
Sau đó lại tổ hợp chập 3 của các tâm này ư??? Và cứ thề đến khi nào hỉ???
Tốt nhất là bác phải post một cái hình cụ thể về cái phương pháp mà bác đã làm lên để mọi người ngâm cứu mới được.
Hề hề hề....



Xin nói thêm : số đường tròn đi qua 3 điểm trong 30 điểm cho trước đã là : C(3,30)=(30! / 3! x 27!)=4060
Nếu cho trước chừng 100 điểm thì nhiều lắm. Đề nghị chủ 2pic nói lại cho rõ ý.



Hê hề Chào Bác!
Ý của gia_bach là:
Ví dụ có 30 điểm thì chia 30 điểm này thành 10 cặp mỗi cặp 3 điểm. lấy tâm của từng cặp này như vậy là từ 30 điểm còn lại 10 điểm. làm tiếp đến khi còn 1 điểm. Nhưng em thấy tư duy như vậy là bị sai rồi hê hê.



Theo lý thuyết đúng là mình phải vẽ Tổ hợp chập 3 của n điểm và cứ thế ... :wub: . Nhưng mình chỉ vẽ một ít các đường tròn thôi :) tương đối thôi mà. Thế nên mình mới hỏi có Brô nào có phương pháp nào hay không thì giúp mình với.
  • 0

#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 10 December 2010 - 06:47 PM

Theo lý thuyết đúng là mình phải vẽ Tổ hợp chập 3 của n điểm và cứ thế ... :wub: . Nhưng mình chỉ vẽ một ít các đường tròn thôi :undecided: tương đối thôi mà. Thế nên mình mới hỏi có Brô nào có phương pháp nào hay không thì giúp mình với.

Chịu, nếu có người muốn giúp bạn đi chăng nữa thì không giúp được đâu, vì không biết QUY LUẬT dựng hình là như thế nào cả tất yếu sẽ không bao giờ làm được. ?
  • 0

#9 npham

npham

    biết lệnh rotate

  • Members
  • PipPipPip
  • 136 Bài viết
Điểm đánh giá: 75 (tàm tạm)

Đã gửi 10 December 2010 - 07:30 PM

Chịu, nếu có người muốn giúp bạn đi chăng nữa thì không giúp được đâu, vì không biết QUY LUẬT dựng hình là như thế nào cả tất yếu sẽ không bao giờ làm được. ?


Có phải mình già rồi hay sao mà đọc không hiểu nổi ý của chủ topic. Có cái hình minh hoạ thì hay quá.

Có phải là tìm tâm đường tròn đi qua tâm của 3 đường tròn khác. Mỗi đường tròn khác được tạo từ 3 điểm bất kỳ cho truớc.?
  • 0

#10 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 10 December 2010 - 08:04 PM

Theo lý thuyết đúng là mình phải vẽ Tổ hợp chập 3 của n điểm và cứ thế ... :wub: . Nhưng mình chỉ vẽ một ít các đường tròn thôi :undecided: tương đối thôi mà. Thế nên mình mới hỏi có Brô nào có phương pháp nào hay không thì giúp mình với.

Hề hề hề,
Chào bạn ........
Quả thực là bài toán bạn đặt ra nó phiêu phiêu làm sao ý.
Này nhé:
1/- nếu quả thật là n điểm đó đã nằm trên đường tròn thì chỉ cần xác định tâm của một vòng tròn duy nhất đi qua ba điểm bất kỳ trong số các điểm đó là OK.
2/- Nếu n điểm này không nằm trên cùng một vòng tròn thì sẽ có biết bao nhiêu cái vòng tròn gần đúng đi qua gần gần các điểm đó, tùy theo cái độ gần gần mà bạn sẽ chọn. Vậy thì cái tiêu chí gần gần ấy nó phải ra sao chứ??? tỷ như là có diện tích lớn nhất và khoảng cách từ các điểm đó tới dường tròn không vượt qua một giá trị nào đó ???? Hay là ngược lại ??? Hay là cái đường tròn dựng được phải chứa nhiều điểm nhất trong tập hợp n điểm đó chẳng hạn....?????
Túm lại là cái tiêu chí bạn không chịu đưa ra thì chả ai biết bạn cần cái gì. Ngay cả khi có tiêu chí rồi cũng còn chõm chọe mệt nghỉ nữa là .....
Bạn hãy chịu khó ngâm cứu vấn đề của bạn cho ky kỹ một chút và đặt ra các tiêu chí tương đối hữu hạn thì may ra mọi người còn có thể tý toáy được. Bằng không thì TH ... U .... UA..... THUA bạn ạ.
Bạn nói vòng tròn trong không gian nghĩa là sao nhỉ??? có phải ý bạn nói đến một mặt cầu???. Vì vòng tròn chỉ là khái niệm về hình học phẳng. Nó có thể nẳm xiêu vẹo một tí nhưng nó phải nằm trên một mặt phẳng bạn ạ....
Hề hề hề,...
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#11 duyminh86

duyminh86

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 11 December 2010 - 11:12 AM

Hề hề hề,
Chào bạn ........
Quả thực là bài toán bạn đặt ra nó phiêu phiêu làm sao ý.
Này nhé:
1/- nếu quả thật là n điểm đó đã nằm trên đường tròn thì chỉ cần xác định tâm của một vòng tròn duy nhất đi qua ba điểm bất kỳ trong số các điểm đó là OK.
2/- Nếu n điểm này không nằm trên cùng một vòng tròn thì sẽ có biết bao nhiêu cái vòng tròn gần đúng đi qua gần gần các điểm đó, tùy theo cái độ gần gần mà bạn sẽ chọn. Vậy thì cái tiêu chí gần gần ấy nó phải ra sao chứ??? tỷ như là có diện tích lớn nhất và khoảng cách từ các điểm đó tới dường tròn không vượt qua một giá trị nào đó ???? Hay là ngược lại ??? Hay là cái đường tròn dựng được phải chứa nhiều điểm nhất trong tập hợp n điểm đó chẳng hạn....?????
Túm lại là cái tiêu chí bạn không chịu đưa ra thì chả ai biết bạn cần cái gì. Ngay cả khi có tiêu chí rồi cũng còn chõm chọe mệt nghỉ nữa là .....
Bạn hãy chịu khó ngâm cứu vấn đề của bạn cho ky kỹ một chút và đặt ra các tiêu chí tương đối hữu hạn thì may ra mọi người còn có thể tý toáy được. Bằng không thì TH ... U .... UA..... THUA bạn ạ.
Bạn nói vòng tròn trong không gian nghĩa là sao nhỉ??? có phải ý bạn nói đến một mặt cầu???. Vì vòng tròn chỉ là khái niệm về hình học phẳng. Nó có thể nẳm xiêu vẹo một tí nhưng nó phải nằm trên một mặt phẳng bạn ạ....
Hề hề hề,...



Cám ơn bạn đã quan tâm tới Topic của mình. Mình xin nói rõ hơn vềvươgng mắc của mình để các bạn giúp đỡ.

1. Trước tiên là xét trên mặt phẳng, mình có một số điểm màu vàng như trong hình:
Hình đã gửi

mình muốn tìm tìm ra tâm của hình tròn màu tím, tâm đó có tính chất là điểm có tổng khoảng cách tới các điểm màu vàng là nhỏ nhất (có thể làm theo phương pháp bình phương tối thiểu với i là khoảng cách âm dương từ điểm màu vàng tới đường tròn, i<0 khi điểm màu vàng nằm trong đường tròn, 0< i khi điểm màu vàng nằm ngoài đường tròn )


2. Thứ 2 xét trong không gian, mình có vật hình trụ như trong hình vẽ:
Hình đã gửi

mình có một số điểm màu vàng nằm ko cùng trong mặt phẳng tiết diện cắt hình trụ theo phương vuông góc với trục hình trụ. Mình muốn tìm tâm của đường tròn nằm trong mặt phẳng vuông góc đó (hoặc nằm trong mặt phẳng tạo với mặt phẳng vuông góc đó 1 góc <1độ theo mọi hướng) sao cho mặt phẳng đó có tổng khoảng cách tới các điểm màu vàng là nhỏ nhất, và trên mặt phẳng đó tìm tâm đường tròn có tổng khoảng cách tới các điểm màu vàng là nhỏ nhất
(làm theo phương pháp bình phương tối thiểu thì tốt quá)

mình nói hơi bị lằng nhằng, có bạn nào hiểu thì giúp mình với nhé. Còn chưa rõ chỗ nào mong các bạn chỉ giúp.
  • 0

#12 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 11 December 2010 - 12:28 PM

Cám ơn bạn đã quan tâm tới Topic của mình. Mình xin nói rõ hơn vềvươgng mắc của mình để các bạn giúp đỡ.

1. Trước tiên là xét trên mặt phẳng, mình có một số điểm màu vàng như trong hình:
Hình đã gửi

mình muốn tìm tìm ra tâm của hình tròn màu tím, tâm đó có tính chất là điểm có tổng khoảng cách tới các điểm màu vàng là nhỏ nhất (có thể làm theo phương pháp bình phương tối thiểu với i là khoảng cách âm dương từ điểm màu vàng tới đường tròn, i<0 khi điểm màu vàng nằm trong đường tròn, 0< i khi điểm màu vàng nằm ngoài đường tròn )
2. Thứ 2 xét trong không gian, mình có vật hình trụ như trong hình vẽ:
Hình đã gửi

mình có một số điểm màu vàng nằm ko cùng trong mặt phẳng tiết diện cắt hình trụ theo phương vuông góc với trục hình trụ. Mình muốn tìm tâm của đường tròn nằm trong mặt phẳng vuông góc đó (hoặc nằm trong mặt phẳng tạo với mặt phẳng vuông góc đó 1 góc <1độ theo mọi hướng) sao cho mặt phẳng đó có tổng khoảng cách tới các điểm màu vàng là nhỏ nhất, và trên mặt phẳng đó tìm tâm đường tròn có tổng khoảng cách tới các điểm màu vàng là nhỏ nhất
(làm theo phương pháp bình phương tối thiểu thì tốt quá)

mình nói hơi bị lằng nhằng, có bạn nào hiểu thì giúp mình với nhé. Còn chưa rõ chỗ nào mong các bạn chỉ giúp.

Hề hề hề,
Vậy là cái tiêu chí gần gần đã có. Vấn đề là cái thuật toán để tìm ra cái thỏa tiêu chí đó. Quả thực không đơn giản. Mình thử đưa một phương án bạn xem có đồng ý không nhé.
1/- Chọn ba điểm bất kỳ trong tập hợp n điểm .
2/- Dựng vòng tròn qua ba điểm đó.
3/- Tính giá trị tổng bình phương khoảng cách từ các điểm còn lại tới vòng tròn.
4/- So sánh các giá trị này để có được giá trị nhỏ nhất.
5/- Lấy vòng tròn tương ứng với giá trị này làm kết quả.

Phương án này gặp phải một vấn đề khá hóc là số bước lặp sẽ rất lớn nếu như cái số n điểm của bạn không nhỏ. Và khi đó thì dễ treo máy lắm....
Phương án này cũng không cho kết quả đúng như bạn muốn vì có thể có những vòng tròn chỉ đi qua 1, 2 hoặc thậm chí chẳng qua điểm nào trong tập hợp n điểm đó lại có thể có bình phương tổng khoảng cách từ các điểm tới nó nhỏ hơn cái vòng tròn kết quả mà bạn chọn.
Hề hề hề, tuy vậy nhưng mình thấy nó khả dĩ có cơ sở hơn là việc đi dựng một vòng tròn vu vơ để tính bạn ạ.....

Nếu bạn Ok thì mình có thể bắt tay vào thử làm xem sao.
Hề hề hề.
Còn cái bài toán không gian của bạn thì mình chưa nghĩ ra giải pháp cụ thể. ...
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#13 duyminh86

duyminh86

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 11 December 2010 - 01:41 PM

Hề hề hề,
Vậy là cái tiêu chí gần gần đã có. Vấn đề là cái thuật toán để tìm ra cái thỏa tiêu chí đó. Quả thực không đơn giản. Mình thử đưa một phương án bạn xem có đồng ý không nhé.
1/- Chọn ba điểm bất kỳ trong tập hợp n điểm .
2/- Dựng vòng tròn qua ba điểm đó.
3/- Tính giá trị tổng bình phương khoảng cách từ các điểm còn lại tới vòng tròn.
4/- So sánh các giá trị này để có được giá trị nhỏ nhất.
5/- Lấy vòng tròn tương ứng với giá trị này làm kết quả.

Phương án này gặp phải một vấn đề khá hóc là số bước lặp sẽ rất lớn nếu như cái số n điểm của bạn không nhỏ. Và khi đó thì dễ treo máy lắm....
Phương án này cũng không cho kết quả đúng như bạn muốn vì có thể có những vòng tròn chỉ đi qua 1, 2 hoặc thậm chí chẳng qua điểm nào trong tập hợp n điểm đó lại có thể có bình phương tổng khoảng cách từ các điểm tới nó nhỏ hơn cái vòng tròn kết quả mà bạn chọn.
Hề hề hề, tuy vậy nhưng mình thấy nó khả dĩ có cơ sở hơn là việc đi dựng một vòng tròn vu vơ để tính bạn ạ.....

Nếu bạn Ok thì mình có thể bắt tay vào thử làm xem sao.
Hề hề hề.
Còn cái bài toán không gian của bạn thì mình chưa nghĩ ra giải pháp cụ thể. ...



Mình nghĩ phương pháp đó của bản cũng hay, bạn giúp mình nhé.

bạn nào có phương pháp nào khác thì giúp mình nhé, đặc biệt là giải bài toán trong không gian. Công việc đòi hỏi nên mình khá là cần.
thanks
  • 0

#14 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

  • Members
  • PipPipPip
  • 116 Bài viết
Điểm đánh giá: 41 (tàm tạm)

Đã gửi 11 December 2010 - 03:45 PM

Mình nghĩ phương pháp đó của bản cũng hay, bạn giúp mình nhé, mình ko biết lập trình, ko biết autolisp :undecided: giúp mình phát nhé.

bạn nào có phương pháp nào khác thì giúp mình nhé, đặc biệt là giải bài toán trong không gian. Công việc đòi hỏi nên mình khá là cần.
thanks

Bài toán của Bạn thuộc loại thử dần.ở đây Mình thử 3 lần. Lần nhất deltaX=10, deltaR=1.0 lần thứ hai deltaX=1, deltaR=0.1 và lần thứ ba
deltaX=0.1, deltaR=0.01.
Bạn đánh từ dòng command tamVT và nhấn enter.
Nếu Bạn up lên 1 mẫu (ví dụ) để Mình chạy thử thì tốt. Bài toán này nếu dùng ngôn ngữ khác thì sẽ chạy nhanh hơn là LISP.
Bài toán không gian thì phức tạp hơn.Dịp khác vậy!
Hy vọng sẽ có ích cho Bạn!

http://www.cadviet.c...les/3/tamvt.lsp
  • 0

#15 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 11 December 2010 - 08:02 PM

Mình nghĩ phương pháp đó của bản cũng hay, bạn giúp mình nhé, mình ko biết lập trình, ko biết autolisp :undecided: giúp mình phát nhé.

bạn nào có phương pháp nào khác thì giúp mình nhé, đặc biệt là giải bài toán trong không gian. Công việc đòi hỏi nên mình khá là cần.
thanks

Chào bạn duyminh86,
Bạn dùng thử lisp này coi sao nhé. Nó được làm dựa trên cái cách mà mình đã nói. Bạn lưu ý trước khi chạy lisp này, bạn phải gõ lệnh locpoint để nó loại bỏ các điểm trùng nhau trong tập chọn của bạn đã nhé.
Mình không hiểu vì sao khi đưa nó vào làm hàm con trong lisp nội suy tâm thì nó lại làm cho lisp này chạy sai nữa. Vì thế đành tạm để nó thành lệnh riêng và bạn phải chạy hai lần vậy. Mình sẽ cố tìm cách khắc phục sự bất tiện này sau nhé.
Hy vọng nó đáp ứng phần nào yêu cầu của bạn.

(defun c:nst ( )
(command "undo" "be")
(setq olc (getvar "cecolor"))
(setq lscir (list))
(setq ssp (ssget (list (cons 0 "point"))))
;;;;;;;;;;;(locpoint ssp)
(setq lst (acet-ss-to-list ssp) )
(foreach e lst
(setq lst1 (vl-remove e lst)
p (cdr (assoc 10 (entget e)))
)
(foreach e1 lst1
(setq lst2 (vl-remove e1 lst1)
p1 (cdr (assoc 10 (entget e1)))
)
(foreach e2 lst2
(setq p2 (cdr (assoc 10 (entget e2))))
(setvar "cecolor" "3")
(command "circle" "3p" p p1 p2 )
(setq ent (entlast))
(setq cir (vlax-ename->vla-object ent))
(setq tkc 0)
(foreach e lst
(setq pt (cdr (assoc 10 (entget e))))
(setq pc (vlax-curve-getClosestPointTo cir pt ))
(setq kc (distance pt pc))
(setq tkc (+ tkc (expt kc 2)))
)
(setq lscir (append lscir (list (list tkc ent))))
)
)
)
(setq lscir (vl-sort lscir '(lambda (x y) (< (car x) (car y)) )) )
(setq mau (car lscir))
(foreach cir lscir
(if (/= (cadr cir) (cadr mau))
(command "erase" (cadr cir) "")
)
)

(setvar "cecolor" olc)
(command "undo" "e")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:locpoint (ssp / lstpt i n e p)
(setq lstpt (list))
(if ssp
(progn
(setq i 0
n (sslength ssp)
)
(while (< i n)
(setq e (ssname ssp i))
(setq p (cdr (assoc 10 (entget e))))
(if (not (member p lstpt))
(setq lstpt (append lstpt (list p)))
(command "erase" e "")
)
(setq i (1+ i))
)
)
)
ssp
)


@All: Nhờ các bác xem giùm vì sao nó lại bị lỗi như vậy. Khi chạy riêng thành hai bước thì mọi thứ OK cả mới kỳ chứ. Mình cho rằng có lẽ là cái hàm (command "erase" ..... ) nó chỉ xóa đối tượng mà không làm cho đối tượng mất hẳn khỏi bộ chọn. Vì thế khi đưa vào làm hàm con trong lisp thì nó gây ra lỗi. Cách khắc phục thì mình nghĩ có thể chơi kiểu chuối là làm một phát chọn lại nữa sau khi xài hàm con locpoint. Các bác có gợi ý gì giải quyết cái chỗ hóc xương này không ạ....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#16 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 11 December 2010 - 09:01 PM

Chào bạn duyminh86,
Mình đã sửa lại để chỉ cần một lần nhập lệnh nst là xong. Bạn xài thử nhé. Cách khắc phục như mình đã nói ở bài trước hơi củ chuối nhưng dùng tạm đã nhé.
Hy vọng nó đáp ứng phần nào yêu cầu của bạn.


(defun c:nst ( )
(command "undo" "be")
(setq olc (getvar "cecolor"))
(setq lscir (list))
(setq ssp (ssget (list (cons 0 "point"))))
(setq p1 (car (acet-geom-ss-extents ssp 0))
p2 (cadr (acet-geom-ss-extents ssp 0))
)
(locpoint ssp)
(setq ssp1 (ssget "c" p1 p2 (list (cons 0 "point"))))
(setq lst (acet-ss-to-list ssp1) )
(foreach e lst
(setq lst1 (vl-remove e lst)
p (cdr (assoc 10 (entget e)))
)
(foreach e1 lst1
(setq lst2 (vl-remove e1 lst1)
p1 (cdr (assoc 10 (entget e1)))
)
(foreach e2 lst2
(setq p2 (cdr (assoc 10 (entget e2))))
(setvar "cecolor" "3")
(command "circle" "3p" p p1 p2 )
(setq ent (entlast))
(setq cir (vlax-ename->vla-object ent))
(setq tkc 0)
(foreach e lst
(setq pt (cdr (assoc 10 (entget e))))
(setq pc (vlax-curve-getClosestPointTo cir pt ))
(setq kc (distance pt pc))
(setq tkc (+ tkc (expt kc 2)))
)
(setq lscir (append lscir (list (list tkc ent))))
)
)
)
(setq lscir (vl-sort lscir '(lambda (x y) (< (car x) (car y)) )) )
(setq mau (car lscir))
(foreach cir lscir
(if (/= (cadr cir) (cadr mau))
(command "erase" (cadr cir) "")
)
)

(setvar "cecolor" olc)
(command "undo" "e")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun locpoint (ssp / lstpt i n e p)
(setq lstpt (list))
(if ssp
(progn
(setq i 0
n (sslength ssp)
)
(while (< i n)
(setq e (ssname ssp i))
(setq p (cdr (assoc 10 (entget e))))
(if (not (member p lstpt))
(setq lstpt (append lstpt (list p)))
(command "erase" e "")
)
(setq i (1+ i))
)
)
)

)


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#17 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 11 December 2010 - 09:43 PM


(defun c:nst ( )
(command "undo" "be")
(setq olc (getvar "cecolor"))
(setq lscir (list))
(setq ssp (ssget (list (cons 0 "point"))))
;;;;;;;;;;;(locpoint ssp)
(setq lst (acet-ss-to-list ssp) )
(foreach e lst
(setq lst1 (vl-remove e lst)
p (cdr (assoc 10 (entget e)))
)
(foreach e1 lst1
(setq lst2 (vl-remove e1 lst1)
p1 (cdr (assoc 10 (entget e1)))
)
(foreach e2 lst2
(setq p2 (cdr (assoc 10 (entget e2))))
(setvar "cecolor" "3")
(command "circle" "3p" p p1 p2 )
(setq ent (entlast))
(setq cir (vlax-ename->vla-object ent))
(setq tkc 0)
(foreach e lst
(setq pt (cdr (assoc 10 (entget e))))
(setq pc (vlax-curve-getClosestPointTo cir pt ))
(setq kc (distance pt pc))
(setq tkc (+ tkc (expt kc 2)))
)
(setq lscir (append lscir (list (list tkc ent))))
)
)
)
(setq lscir (vl-sort lscir '(lambda (x y) (< (car x) (car y)) )) )
(setq mau (car lscir))
(foreach cir lscir
(if (/= (cadr cir) (cadr mau))
(command "erase" (cadr cir) "")
)
)

(setvar "cecolor" olc)
(command "undo" "e")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:locpoint (ssp / lstpt i n e p)
(setq lstpt (list))
(if ssp
(progn
(setq i 0
n (sslength ssp)
)
(while (< i n)
(setq e (ssname ssp i))
(setq p (cdr (assoc 10 (entget e))))
(if (not (member p lstpt))
(setq lstpt (append lstpt (list p)))
(command "erase" e "")
)
(setq i (1+ i))
)
)
)
ssp
)


@All: Nhờ các bác xem giùm vì sao nó lại bị lỗi như vậy. Khi chạy riêng thành hai bước thì mọi thứ OK cả mới kỳ chứ. Mình cho rằng có lẽ là cái hàm (command "erase" ..... ) nó chỉ xóa đối tượng mà không làm cho đối tượng mất hẳn khỏi bộ chọn. Vì thế khi đưa vào làm hàm con trong lisp thì nó gây ra lỗi. Cách khắc phục thì mình nghĩ có thể chơi kiểu chuối là làm một phát chọn lại nữa sau khi xài hàm con locpoint. Các bác có gợi ý gì giải quyết cái chỗ hóc xương này không ạ....

Chào Bác Bình
1. Bác tắt chế độ Osnap trong Lisp nhé. Nếu không sẽ bị lỗi
2. Hàm locpoint của bác xóa cái point trùng đi trong tập chọn ssp đi cho nên như bác đã thấy là đối tượng xóa đi, nhưng bản thân ename nó vẫn tồn tại.
Do đó, biến e hay e1 hay e2 mà tình cờ mang giá trị entity tồn tại này (đối tượng bị xóa) thì (entget e) -> trả về nil -> nên bị lỗi
Ví dụ :
(setq e (car(entsel)))
-> Xóa đối tượng đi
(entdel e)
-> Kiểm tra xem đối tượng đã bị xóa chưa
(entget e) -> NIL
Hoặc (vlax-erased-p e) -> Return : T

Cách giải quyết như sau :
*. Duyệt qua từng chú point trong tập ssp
*. Nếu point không là thành viên của Lstpt thì đưa point vào Lstpt và thiết lập thêm List Lstent là tập chứa entity của point[/b]
*. Nếu point không là thành viên của Lstpt thì xóa đối tượng point đi

Kết quả trả về của hàm phải là :
(acet-list-to-ss Lstent)
Lisp sẽ rất chậm nếu với số lượng điểm là tương đối lớn.

Chúc bác ngủ ngon :undecided:
  • 1

#18 npham

npham

    biết lệnh rotate

  • Members
  • PipPipPip
  • 136 Bài viết
Điểm đánh giá: 75 (tàm tạm)

Đã gửi 11 December 2010 - 10:22 PM

(@All: Nhờ các bác xem giùm vì sao nó lại bị lỗi như vậy. Khi chạy riêng thành hai bước thì mọi thứ OK cả mới kỳ chứ. Mình cho rằng có lẽ là cái hàm (command "erase" ..... ) nó chỉ xóa đối tượng mà không làm cho đối tượng mất hẳn khỏi bộ chọn. Vì thế khi đưa vào làm hàm con trong lisp thì nó gây ra lỗi. Cách khắc phục thì mình nghĩ có thể chơi kiểu chuối là làm một phát chọn lại nữa sau khi xài hàm con locpoint. Các bác có gợi ý gì giải quyết cái chỗ hóc xương này không ạ....


Theo tôi thì bác đã dùng erase thì nên xoá điểm trùng trước khi chọn ssget để xử lý. Có nghĩa cái lcpoint đặt trước xử lý trên (ssget "X" '( ...)) rồi sau đó mới mới tới (ssget '(....))

Góp ý xí thôi, g9 cả nhà.
  • 1

#19 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 12 December 2010 - 11:21 AM

Chào Bác Bình
1. Bác tắt chế độ Osnap trong Lisp nhé. Nếu không sẽ bị lỗi
2. Hàm locpoint của bác xóa cái point trùng đi trong tập chọn ssp đi cho nên như bác đã thấy là đối tượng xóa đi, nhưng bản thân ename nó vẫn tồn tại.
Do đó, biến e hay e1 hay e2 mà tình cờ mang giá trị entity tồn tại này (đối tượng bị xóa) thì (entget e) -> trả về nil -> nên bị lỗi
Ví dụ :
(setq e (car(entsel)))
-> Xóa đối tượng đi
(entdel e)
-> Kiểm tra xem đối tượng đã bị xóa chưa
(entget e) -> NIL
Hoặc (vlax-erased-p e) -> Return : T

Cách giải quyết như sau :
*. Duyệt qua từng chú point trong tập ssp
*. Nếu point không là thành viên của Lstpt thì đưa point vào Lstpt và thiết lập thêm List Lstent là tập chứa entity của point[/b]
*. Nếu point không là thành viên của Lstpt thì xóa đối tượng point đi

Kết quả trả về của hàm phải là :
(acet-list-to-ss Lstent)
Lisp sẽ rất chậm nếu với số lượng điểm là tương đối lớn.

Chúc bác ngủ ngon :wub:

Chào bác Tue_NV,
Chân thành cám ơn sự chỉ bảo của bác. Mình cũng hơi dốt khi tạo list point mà không tạo list ename của nó bởi vì cái cần là list ename chứ không phải list point. Cái list point chỉ giúp mình loại các điểm trùng mà thôi. Mình đã bổ sung lại và lisp đã chạy tốt. Nó đây ạ: (trong lisp này mình có bổ sung thêm phần thông báo các giá trị xác định của đối tượng tìm được để người sử dụng cân nhắc lựa chọn và tạo thêm tâm của vòng tròn tìm được để người dùng có thể sử dụng tiếp theo)

(defun c:nst ( / olc lscir ssp ssp1 p1 p2 lst lst1 lst2 p cir tkc pt pc kc mau)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setq olc (getvar "cecolor"))
(setvar "osmode" 0)
(setq lscir (list))
(setq ssp (ssget (list (cons 0 "point"))))
;;;;;;;;(setq p1 (car (acet-geom-ss-extents ssp 0))
;;;;;;;; p2 (cadr (acet-geom-ss-extents ssp 0))
;;;;;;;:undecided:
(locpoint ssp)
;;;;;;;;(setq ssp1 (ssget "c" p1 p2 (list (cons 0 "point"))))
;;;;;;;;(setq lst (acet-ss-to-list ssp1) )
(foreach e lst
(setq lst1 (vl-remove e lst)
p (cdr (assoc 10 (entget e)))
)
(foreach e1 lst1
(setq lst2 (vl-remove e1 lst1)
p1 (cdr (assoc 10 (entget e1)))
)
(foreach e2 lst2
(setq p2 (cdr (assoc 10 (entget e2))))
(setvar "cecolor" "3")
(command "circle" "3p" p p1 p2 )
(setq ent (entlast))
(setq cir (vlax-ename->vla-object ent))
(setq tkc 0)
(foreach e lst
(setq pt (cdr (assoc 10 (entget e))))
(setq pc (vlax-curve-getClosestPointTo cir pt ))
(setq kc (distance pt pc))
(setq tkc (+ tkc (expt kc 2)))
)
(setq lscir (append lscir (list (list tkc ent))))
)
)
)
(setq lscir (vl-sort lscir '(lambda (x y) (< (car x) (car y)) )) )
(setq mau (car lscir))
(alert (strcat "\n Tong binh phuong khoang cach tu cac diem toi vong tron tim duoc la: " (rtos (car mau) 2 2)))
(setq po (cdr (assoc 10 (entget (cadr mau))))
R (cdr (assoc 40 (entget (cadr mau))))
)
(command "point" po "")
(alert (strcat "\n Vong tron tim duoc co toa do tam la:" "\n x = " (rtos (car po) 2 4)
"\n y = " (rtos (cadr po) 2 4) "\n z = " (rtos (caddr po) 2 4)
"\n Ban kinh la " (rtos R 2 4) ))
(foreach cir lscir
(if (/= (cadr cir) (cadr mau))
(command "erase" (cadr cir) "")
)
)
(setvar "osmode" oldos)
(setvar "cecolor" olc)
(command "undo" "e")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun locpoint (ssp / lstpt i n e p)
(setq lstpt (list)
lst (list)
)
(if ssp
(progn
(setq i 0
n (sslength ssp)
)
(while (< i n)
(setq e (ssname ssp i))
(setq p (cdr (assoc 10 (entget e))))
(if (not (member p lstpt))
(progn
(setq lstpt (append lstpt (list p)))
(setq lst (append lst (list e)))
)
(command "erase" e "")
)
(setq i (1+ i))
)
)
)
lst
)

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#20 NguyenNdait

NguyenNdait

    biết vẽ line

  • Members
  • PipPip
  • 28 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 14 December 2010 - 11:13 AM

Chào cả nhà.
Chào bạn ptbinh
Mình góp ý bạn như sau :
- Thuật toán tính số đường tròn qua 3 điểm (Tổ hợp chập 3 của n phần tử) bằng cách lấy foreach 3 lần làm kết quả tăng 6 lần.
Do đó nếu cho chạy chương trình với khoảng n>100 phần tử thì lâu lắm.
- Đường tròn kết quả chỉ là một đtròn qua ít nhất 3 điểm trong tập hợp n điểm với tổng bình phương là nhỏ nhất trong tổng số các đường tròn khả dĩ.
- Mong muốn của bài toán là tìm được đường tròn có tâm là tâm của vùng tạo bởi tâm các đtròn đi qua 3 điểm trong n điểm.
TB: Mong chủ 2pic nói rõ thêm nữa về đề tài này. (Thuần hình học hay đây là một dạng bài toán tối ưu hóa theo pp bình phương tối thiểu)
  • 0