PDA

View Full Version : Giúp đỡ về MatLab ???



TeppiYayni
27-01-2005, 19:40
Có bro nào biết cách vẽ đồ thị 1 hàm số mà bị giới hạn trên đoạn X và Y không ???
ví dụ : vẽ hàm y=x+1 trên x thuộc [0;10] và y thuộc [3;8]

xin cảm ơn ...

nguyentum
28-01-2005, 02:39
Có bro nào biết cách vẽ đồ thị 1 hàm số mà bị giới hạn trên đoạn X và Y không ???
ví dụ : vẽ hàm y=x+1 trên x thuộc [0;10] và y thuộc [3;8]

xin cảm ơn ...

x=[0:10];
y=x+1;
plot(x,y);
axis([0 10 3 8]);

TeppiYayni
29-01-2005, 20:14
mình đang mô phỏng chuyển động = vòng lặp,khổ nỗi cái mình đang mô phỏng là 1 hình được tạo bởi rất nhiều đường thẳng (miền trong của các đường thẳng),có bro nào biết làm giúp cái .... cảm ơn,khi mô phỏng chỉ cần làm cho miền bị bao (miển trong) quay quanh 1 điểm là được ,không cần tới các đường thẳng bao ...

sẵn tiện hỏi cái, bro nào có thể giúp mình cú pháp tô màu (xanh,đỏ,...) cái miền bị bao bởi n đường thẳng không,nếu biết n phương trình đường thẳng ấy ?xin cảm ơn ...

Mach2
29-01-2005, 21:50
Matlab ko có hàm dạng "flood" để tô màu đâu bạn, muốn tô màu thì vẽ primitive mà tô.
Vấn đề của bạn thật ra thì tốt nhất là tìm tọa độ đống điểm đó đi. Sau khi có tọa độ thì:
2) nếu miền lồi thì xác định convexhull rồi vẽ, còn ko lồi thì phải triangulate bằng Delaunay triangulation rồi vẽ+tô tam giác.
1) tìm tọa độ điểm cập nhật rồi vẽ.

Tietkhanhan
30-01-2005, 09:17
CÓ huynh nào có link Video nhạc phim không ? Xin up lên cho bà con với ! Nghe riết cũng chán, xem hình sứơng hơn... Cho đệ xin bài Tiếu ngạo giang hồ của Nhậm Hiền Tề (2000) nha !

TeppiYayni
31-01-2005, 11:32
không có cách khác ngoài cách tìm tọa độ điểm sao huynh Match2 ???còn cái primitive , convexhull, triangulate là gì ?huynh chỉ cụ thể nhé ...

cho mình hỏi lệnh FILL có thể tô màu miền trong bao bởi các đường thẳng được không ?lệnh này mình đã làm và tô màu được hình được bao bởi các điểm thôi...

bài toán mình khi đã vẽ ra các đường thẳng bao là rất nặng rồi,mất cả phút MATLAB 7 chạy mới xong,giờ tìm cả đống điểm thì đợi đến bao giờ ???hichic

Mach2
31-01-2005, 13:15
oh, dùng FILL cũng được, chỉ phải tội phải xác định điểm (đó là cách duy nhất thôi).
ôi mà chạy cả phút thì có gì mà chậm đâu.

TeppiYayni
31-01-2005, 14:04
huynh Mach2 chỉ mình rõ ràng về primitive , convexhull, triangulate nhé .....cảm ơn

Mach2
31-01-2005, 15:46
Bạn dùng FILL thì ko cần phải làm màu mè convexhull, triangulate chi cho mệt vậy. Sorry vì wên hàm FILL ngay từ đầu.

nguyentum
31-01-2005, 21:36
Theo mình hiểu thì một trong những ứng dụng của Delaunay Triangulation la như sau:
Một vật thể có thể được mô tả từ các điểm tương ứng, bao gồm boundary points và interior points. Delaunay Triangulation là một qui tắc cho phép xác định các tam giác từ các điểm này để mô tả vật thể. Ví dụ tam giác A được tạo bởi p1 p2 p3, vật thể chuyển động tương ứng toạ độ các điểm p1 p2 p3 thay đổi, tuy nhiên tam giác A vẫn là từ p1,p2,p3. Sau đây là thuật toán Delaunay Triangulation:
The mesh is finally obtained by applying constrained Delaunay triangulation to the set of decoded node points, where the polygonal mesh boundary is used as a constraint. A
constrained triangulation of a set of node points contains the line segments between
successive node points on the boundary as edges and contains triangles only in the interior of the region defined by the boundary. Each triangle <pl, pn, pm> of a constrained Delaunay triangulation furthermore satisfies the property that the circumcircle of tk does not contain in its interior any node visible from all three vertices of tk . A node point is visible from another node point if a straight line drawn between them falls entirely inside or exactly on the constraining polygonal boundary. The Delaunay triangulation process is defined as any algorithm that is equivalent to the
following.
1) Determine any triangulation of the given node points such that all triangles are contained in the interior of the polygonal boundary.
2) Inspect each interior edge, shared by two opposite triangles, of the triangulation and test if the edge is locally Delaunay. If there is an interior edge that is not locally Delaunay, the two opposite triangles <pa, pb, pc> and <pa, pc, pd> sharing this edge are replaced by triangles <pa, pb, pd> and <pb, pc, pd>. Continue until all interior edges of the triangulationare locally Delaunay.
An interior edge, shared by two opposite triangles <pa, pb, pc> and <pa, pc, pd>, is locally Delaunay if point pd is outside the circumcircle of triangle <pa, pb, pc>. If point pd is inside the circumcircle of triangle <pa, pb, pc>, then the edge is not locally Delaunay.
Source: ISO/IEC 14496-2:2002

TeppiYayni
01-02-2005, 15:40
huynh nguyentum à , thế có lệnh nào cho fép định nghĩa đa giác n cạnh ko ?
huynh thử trình bày ví dụ như dùng Delaunay Triangulation định nghĩa tam giác , sau đó mô phỏng chuyển động thử xem ? làm ơn giúp tui mở đường máu,hichic ,tui đang làm = vòng lặp,cực kì nặng nề , liệu có cách nào khác ko ?

mà thấy người ta mô phỏng trên GUI sao có vẻ nhẹ nhàng wá ...

Mach2
01-02-2005, 15:49
chời ơi là chời. Đã chỉ gòi mà cậu Teppi này thiệt tình.
Tìm tọa độ offline (tìm có 1 lần chứ mấy), vẽ cái gì quay cái gì sau này thì chỉ có modify cái đống điểm đó.
Delaunay Triangulation: là tạo 1 lưới tam giác có đỉnh thuộc 1 đống vertex có sẵn. Lưới tam giác này có đặc điểm là: i) Các edge của các tam giác ko "cắt" nhau. ii) Các tam giác là "đẹp" nhất (góc gần đều). Về mặt toán học thì bài toán Delaunay triangulation là 1 bài toán optimization NP-hard. Nếu ai biết về Voronoi diagram thì nó là dual problem của thằng Delaunay này.
(Thôi đọc loạn gòi thì wên Delaunay đê, Delaunay đòi phải có tọa độ điểm ok?)
Cách hồi trứơc tui chỉ cho Teppi là triangulate thằng đa giác rồi vẽ từng tam giác một. Sau này nghĩ lại thấy ngu wá vì dùng FILL là xong gòi còn gì.
Làm cái gì làm cũng phải tìm tọa độ hết. Ko thoát được đâu. Cậu Teppi tìm tọa độ bi nhiêu điểm mà rên rỉ um xùm vậy?

TeppiYayni
01-02-2005, 16:30
huynh nghĩ xem , dựng 360 đường thẳng,sau đó tìm tọa độ cả đống điểm,rồi mô phỏng chuyển động = vòng lặp ---> đợi chắc cả giờ .... hichic

huynh có cách nào mô phỏng ko = vòng lặp ko ?liệu MATLAB có trình nào chuyên mô phỏng ko nhỉ ???mình có thấy Animation , các huynh biết là gì ko ?

Mach2
01-02-2005, 16:40
Bạn tính tọa độ mấy điểm đó 1 lần chứ mấy. Sau đó đâu cần tính lại đâu mà sợ. Nếu ko hiểu thì post bài lên đây đê, bạn vẽ hình gì mà phải cần 360 đường thẳng để bound nó?

TeppiYayni
01-02-2005, 16:54
mình đang làm về cam

bài đơn giản : từ các quy luật , mình sẽ vẽ ra các điểm (càng nhiều càng chính xác) ,các điểm đó là miền bao cần tìm,sau đó mô phỏng

bài phức tạp : từ các quy luật , mình sẽ vẽ ra các điểm (càng nhiều càng chính xác) ,tại mỗi điểm , vẽ 1 dt wa điểm đó(dựa vào quy luật) ,sau đó,miền bao chính là các dt vừa vẽ ra

các huynh có cách nào mô phỏng ko = vòng lặp ko ?liệu MATLAB có trình nào chuyên mô phỏng ko nhỉ ???mình có thấy Animation , các huynh biết là gì ko ?

Mach2
01-02-2005, 18:20
đã thế thì làm "bài đơn giản" cho rồi :) Nói chứ thực ra để thiết kế CAM thường là làm pp "chấm điểm" thôi. Cái pp "đt" lợi dụng thêm ít lý thuyết để tính toán gọn đi nhưng thực chất chả gọn bi nhiêu cả.
Hóa ra bạn thiết kế CAM, tôi có 1 dạo cũng vẽ dùm người bạn (kiểu animation) 1 cái CAM thì nhận data của nó là điểm chứ ko phải là đường :)
Về simulation: mô phỏng ko vòng lặp là cái gì vậy? Bạn đừng chế thuật ngữ chứ. Về Simulation thì Matlab có hẳn 1 hệ Simulink để mô phỏng hệ thống, khá là mạnh và cũng được giới kỹ thuật sử dụng nhiều, tuy nhiên nhiều nhất vẫn là về Điều khiển. Chuyện "mô phỏng" của bạn, tôi nghĩ thực chất là vẽ animation cho CAM thì Simulink chả giúp gì được. Mà nó cũng chỉ là vẽ thôi.
Animation thực chất là bạn vẽ nhiều hình thay đổi liên tục chứ có gì mà gọi là "mô phỏng" quá đáng. Bài toán của bạn tôi nghĩ là thế này.
1) Bước offline: design CAM -> cho 1 cơ cấu chuyển động theo 1 quỹ đạo nào đó -> tìm một số điểm tựa trên CAM (chắc là bài "đơn giản" như bạn nói). Tìm nhiều -> CAM chính xác, vậy thôi phải ko?
2) Bước online: có CAM, giờ mô phỏng, cho CAM quay, xem thử chuyển động của trục (hay cái gì đó) có "đẹp" như input ko.

nguyentum
02-02-2005, 16:22
Trong Matlab có hỗ trợ tạo file .avi, mình nghĩ bạn cũng có thể dùng để mô tả chuyển động. Giả sử rằng bạn có thể vẽ được vật thể tại mọi thời điểm(Làm thế nào thì mình nghĩ bạn cố gắng một tí nữa là ra thôi;))

aviobj = avifile( 'test.avi', 'quality', n); % n từ 0..100
for i = 1 : numberOfFrame
plot(......); %vẽ vật thể hoặc dùng bất cứ lệnh gì để hiện thị
frame = getrame;
aviobj = addframe(aviobj, frame);
end;
close(aviobj);

TeppiYayni
02-02-2005, 21:59
bài toán của tui là bao gồm cả 2 bài đơn giản và phức tạp ......còn cam cần lắc đáy = thì biên dạng cam là bài toán phức tạp đó---> đang bí hoàn toàn về cam này

còn mấy loại cam khác tui cũng đã hoàn thành,chỉ có mô phỏng = FOR ko dc nhuyễn,sao thấy thầy mình làm chuyển động rất nhuyễn,cơ cấu tay quay con trượt di chuyển cực kì nhuyễn , lam sao dc thế nhỉ ???

huynh nguyentum chỉ rõ cho em biết nhá ,viết thế thì em thua thôi , hichic

nguyentum
02-02-2005, 22:41
Ok, bạn thử thêm mấy cái này vào ct của bạn nhé:

aviobj = avifile( 'test.avi', 'quality', 100, 'fps', 25);

for ..... % mở đầu vòng for của bạn

%chương trình của bạn

frame = getrame;
aviobj = addframe(aviobj, frame);
end; &Kết thúc vòng for của bạn
close(aviobj);

Sau khi bạn kết thúc chạy chương trình, bạn thử coi cai file test.avi xem chất lượng thế nào nhé.

TeppiYayni
11-02-2005, 22:27
hic,cái code của huynh sao nó cứ báo sai mãi ? error path filename ???
sau đó , làm tan nát cái MatLab lun , chương trình chạy í ạch,lừ đừ lun ???không hiểu được ???

huynh có thể làm 1 bài đơn giản này thử xem với cú pháp trên không :
cho điểm A chuyển động trong đoạn[0:5] mà mình có thể thấy được ? nếu máy mạnh chạy cái vù,máy íu may ra có thể thâý rõ chuyển động nhưnghuynh thử làm với cú pháp trên xem ( làm sao chỉnh frame) phù hợp ? tui thì dùng Pause(dở ẹc) ...

nguyentum
12-02-2005, 04:08
Ví dụ sau mô tả chuyển động của A từ (1,1) đến (5,5) trong vòng 2s với 25 Frames/s

clear all;
clc;
x = 1;
y = 1;
T = 2;
fps = 25;
temp = (5 - 1)/(T*fps);
aviobj = avifile('test.avi','quality',100,'fps',fps);
axis([0 10 0 10]);
while(x<=5 && y<=5)
plot(x,y,'o');
axis([0 10 0 10]);
x=x + temp;
y=y + temp;
frame = getframe;
aviobj = addframe(aviobj,frame.cdata);
end;
aviobj=close(aviobj);

TeppiYayni
02-03-2005, 17:36
cảm ơn huynh nguyentum nhiều về AVI,tôi đã áp dụng dc rồi ,way lại fần đầu,cho tôi hỏi giả sử có 3 đường thẳng cắt nhau tạo thành 1 tam giác,cho mình hỏi làm sao tô màu dc hình tam giác ấy nếu ko dùng Fill tô các điểm tọa độ !