伊莉討論區

標題: MATLAB 圖形問題【未解決】 [打印本頁]

作者: a97011    時間: 2014-5-20 08:27 PM     標題: MATLAB 圖形問題【未解決】

本帖最後由 a97011 於 2014-6-5 03:52 PM 編輯


*一簡單多邊形其頂點均落在格子點上稱為
 ”格子點上簡單多邊形”
*程式功能:
 1.可隨機產生格子點上簡單多邊形
   2.繪圖產生此多邊形

想請問各位大大,如何隨機產生簡單多邊形,
卻不會產生"非簡單多邊形"
多邊形數 N=隨機產生






作者: mm122048    時間: 2014-5-21 04:07 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: c17283945    時間: 2014-5-23 07:27 AM

本帖最後由 c17283945 於 2014-5-23 07:39 AM 編輯

n=input('輸入正多邊形邊數:');
R=input('輸入外接圓半徑:');

%多邊形
L = linspace(0,2.*pi,n+1); xa = R*cos(L)';ya = R*sin(L)';

作者: a97011    時間: 2014-5-23 08:01 AM

mm122048 發表於 2014-5-21 04:07 PM
不知道這樣有沒有滿足你耶!
自己參閱吧

萬分感謝大大詳細的指導,以下我做了些修改
但存在些BUG

BUG 1:當'descend'可能會產生線相交,希望能避免
BUG 2:四邊形以上,可能有2點以上"在同一條線"

另外想再請教一下大大
Q1:計算此多邊形的"所有邊"會經過多少個格子點?
Q2:計算此多邊形所圍的區域內包含多少個格子點?

以下為CODE:
%% 格子上簡單多邊形
clc
N=randi(8,1)+2  %多邊形邊數, "+2":當隨機變數為1時,為三角形
S=randi(10,1);  %圖形大小

T=randperm(360);  %randperm會產生 1:n 間的隨機排列
TT=deg2rad(T(1:N));  %deg2rad 角度到弧度
U=randperm(360);  
UU=deg2rad(U(1:N));
    TT=sort(TT,'ascend');  %升冪排列
if randi(2,1)==1;   
    UU=sort(UU,'ascend');
else
    UU=sort(UU,'descend');
end
X=round(S*sin(TT));  %round取四捨五入
Y=round(S*cos(UU));
X=[X(1,:) X(1)];
Y=[Y(1,:) Y(1)];
plot(X,Y,'-o'),title('簡單多邊形')
%畫出方格
grid on
axis([-10 10 -10 10])
set(gca,'GridLineStyle','-','XTick',[-10:1:10],'YTick',[-10:1:10])
axis square



作者: mm122048    時間: 2014-5-25 06:43 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: a97011    時間: 2014-5-25 11:04 PM

mm122048 發表於 2014-5-25 06:43 PM
等等歐 我現在才看懂你要的東西
所有點都是整數座標對吧!!?
然後計算邊的格字數嗎? ...

是的!!所有點都是整數座標
(在我回文的CODE最下面有打上)

我舉個圖例來詳細說明
假設一個簡單五邊形,而五邊形的五個邊經過
1.所有邊(5個邊)經過的格子點有9個(紅色圈)
2.此五邊形包含了 13個 格子點(綠色圈)

Q1:計算此多邊形的"所有邊"會經過多少個格子點?
Q2:計算此多邊形所圍的區域內包含多少個格子點?
作者: c17283945    時間: 2014-5-30 08:36 AM

2008a 執行到 randi&deg 會出錯 T T
請問有誰知道該如何解決呢?





歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!