0
我需要繪製一個在邊上有半圓的Pascal(dev-pascal)多邊形。我會給我到目前爲止的代碼。它也有對角線。繪製一個在其兩側有半圓的多邊形
uses crt,graph;
var a,b:smallint;
x0,y0,n,j,k,r:integer;
xevi,yoni:array[1..50] of integer;
i:real;
begin
write('n?.. ');readln(n);
detectgraph(a,b);
initgraph(a,b,'');
x0:=getmaxx div 2;
y0:=getmaxy div 2;
j:=0;
i:=0;
repeat
inc(j);
xevi[j]:=trunc(x0+200*cos(i));
yoni[j]:=trunc(y0-200*sin(i));
i:=i+2*pi/n;
until i>2*pi;
r:=trunc(sqrt(sqr((xevi[1]-xevi[2])) + sqr((yoni[1]-yoni[2])))) div 2;
for j:=1 to n do begin
if (xevi[j+1]-xevi[j])<>0 then begin
k:=trunc(arctan(
//abs(
((yoni[j+1]-yoni[1])/(xevi[j+1]-xevi[j])-1)
/(1+(yoni[j+1]-yoni[1])/(xevi[j+1]-xevi[j]))
//)
)*180/pi); end
else k:=90;
if k>0 then arc((xevi[j]+xevi[j+1]) div 2, (yoni[j]+yoni[j+1]) div 2, k, k+180, r)
else begin
k:=360+k;
if k+180>360 then k:=360-k;
arc((xevi[j]+xevi[j+1]) div 2, (yoni[j]+yoni[j+1]) div 2, k, k+180, r);
end;
end;
for j:=1 to n do
for k:=1 to n do
line(xevi[j],yoni[j],xevi[k],yoni[k]);
readln;
closegraph;
end.
正如你可以看到,我試圖使用解析幾何找到多邊形的兩個相鄰頂點之間的斜率,然後計算與該斜率的線的角度,然後使用角度來繪製圓弧。
所以基本上,我不知道爲什麼它不起作用,我也確信有一個更簡單的方法來做到這一點!任何幫助都將不勝感激!
謝謝!
謝謝!奇怪的正面和負面的價值在那裏,因爲由於某種原因,當我得到一個消極的角度,或超過360度的角度,這是不正確的解釋。我仍然無法使它工作 - devpascal沒有arctan2函數。不過,我做了一個有效的工作!再次感謝! – krvolok
啊,對不起,沒有意識到atan2失蹤了。這很關鍵,很難做到。如果你需要額外的+/- 1和角度檢查,我懷疑你的atan2程序中有一個錯誤。 –