锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>


宸茬煡4鐐瑰潗鏍囨眰浣撶Н錛?/span>鍏朵腑鍥涗釜鐐圭殑鍧愭爣鍒嗗埆涓猴紙x1,y1,z1錛?span lang=EN-US>,錛?span lang=EN-US>x2,y2,z2錛?span lang=EN-US>,錛?span lang=EN-US>x3,y3,z3錛?span lang=EN-US>,錛?span lang=EN-US>x4,y4,z4錛?br>
娉ㄦ剰浜嬮」錛?br>
1. 娉ㄦ剰鑸嶅叆鏂瑰紡(0.5鐨勮垗鍏ユ柟鍚?span lang=EN-US>);闃叉杈撳嚭-0.
2. 鍑犱綍棰樻敞鎰忓嫻嬭瘯涓嶅縐版暟鎹?span lang=EN-US>.
3. 鏁存暟鍑犱綍娉ㄦ剰xmult鍜?span lang=EN-US>dmult鏄惁浼氬嚭鐣?span lang=EN-US>;
絎︾偣鍑犱綍娉ㄦ剰eps鐨勪嬌鐢?span lang=EN-US>.
4. 閬垮厤浣跨敤鏂滅巼;娉ㄦ剰闄ゆ暟鏄惁浼氫負0.
5. 鍏紡涓瀹氳鍖栫畝鍚庡啀浠e叆.
6. 鍒ゆ柇鍚屼竴涓?span lang=EN-US>2*PI鍩熷唴涓よ搴﹀樊搴旇鏄?span lang=EN-US>
abs(a1-a2)<beta||abs(a1-a2)>pi+pi-beta;
鐩哥瓑搴旇鏄?/span>
abs(a1-a2)<eps||abs(a1-a2)>pi+pi-eps;
7. 闇瑕佺殑璇濆敖閲忎嬌鐢?/span>atan2,娉ㄦ剰:atan2(0,0)=0,
atan2(1,0)=pi/2,atan2(-1,0)=-pi/2,atan2(0,1)=0,atan2(0,-1)=pi.
8. cross product = |u|*|v|*sin(a)
dot product = |u|*|v|*cos(a)
9. (P1-P0)x(P2-P0)緇撴灉鐨勬剰涔?span lang=EN-US>:
姝?span lang=EN-US>: <P0,P1>鍦?span lang=EN-US><P0,P2>欏烘椂閽?span lang=EN-US>(0,pi)鍐?span lang=EN-US>
璐?span lang=EN-US>: <P0,P1>鍦?span lang=EN-US><P0,P2>閫嗘椂閽?span lang=EN-US>(0,pi)鍐?span lang=EN-US>
0 : <P0,P1>,<P0,P2>鍏辯嚎,澶硅涓?span lang=EN-US>0鎴?span lang=EN-US>pi
鍒ゆ柇鐐筆鏄惁鍦ㄥ杈瑰艦涓槸璁$畻鍑犱綍涓竴涓潪甯稿熀鏈絾鏄崄鍒嗛噸瑕佺殑綆楁硶銆備互鐐筆涓虹鐐癸紝鍚戝乏鏂逛綔灝勭嚎L錛岀敱浜庡杈瑰艦鏄湁鐣岀殑錛屾墍浠ュ皠綰縇鐨勫乏绔竴瀹氬湪澶氳竟褰㈠錛岃冭檻娌跨潃L浠庢棤絀瘋繙澶勫紑濮嬭嚜宸﹀悜鍙崇Щ鍔紝閬囧埌鍜屽杈瑰艦鐨勭涓涓氦鐐圭殑鏃跺欙紝榪涘叆鍒頒簡澶氳竟褰㈢殑鍐呴儴錛岄亣鍒扮浜屼釜浜ょ偣鐨勬椂鍊欙紝紱誨紑浜嗗杈瑰艦錛?#8230;…鎵浠ュ緢瀹規槗鐪嬪嚭褰揕鍜屽杈瑰艦鐨勪氦鐐規暟鐩瓹鏄鏁扮殑鏃跺欙紝P鍦ㄥ杈瑰艦鍐咃紝鏄伓鏁扮殑璇漃鍦ㄥ杈瑰艦澶栥?/p>
浣嗘槸鏈変簺鐗規畩鎯呭喌瑕佸姞浠ヨ冭檻銆傚鍥句笅鍥?a)(b)(c)(d)鎵紺恒傚湪鍥?a)涓紝L鍜屽杈瑰艦鐨勯《鐐圭浉浜わ紝榪欐椂鍊欎氦鐐瑰彧鑳借綆椾竴涓紱鍦ㄥ浘(b)涓紝L鍜屽杈瑰艦欏剁偣鐨勪氦鐐逛笉搴旇璁$畻錛涘湪鍥?c)鍜?d) 涓紝L鍜屽杈瑰艦鐨勪竴鏉¤竟閲嶅悎錛岃繖鏉¤竟搴旇琚拷鐣ヤ笉璁°傚鏋淟鍜屽杈瑰艦鐨勪竴鏉¤竟閲嶅悎錛岃繖鏉¤竟搴旇琚拷鐣ヤ笉璁°?/p>
涓轟簡緇熶竴璧瘋錛屾垜浠湪璁$畻灝勭嚎L鍜屽杈瑰艦鐨勪氦鐐圭殑鏃跺欙紝1銆傚浜庡杈瑰艦鐨勬按騫寵竟涓嶄綔鑰冭檻錛?銆傚浜庡杈瑰艦鐨勯《鐐瑰拰L鐩鎬氦鐨勬儏鍐碉紝濡傛灉璇ラ《鐐規槸鍏舵墍灞炵殑杈逛笂綰靛潗鏍囪緝澶х殑欏剁偣錛屽垯璁℃暟錛屽惁鍒欏拷鐣ワ紱3銆傚浜嶱鍦ㄥ杈瑰艦杈逛笂鐨勬儏褰紝鐩存帴鍙垽鏂璓灞炰簬澶氳竟琛屻傜敱姝ゅ緱鍑虹畻娉曠殑浼唬鐮佸涓嬶細
count ← 0;
浠涓虹鐐癸紝浣滀粠鍙沖悜宸︾殑灝勭嚎L;
for 澶氳竟褰㈢殑姣忔潯杈箂
do if P鍦ㄨ竟s涓?nbsp;
then return true;
if s涓嶆槸姘村鉤鐨?
then if s鐨勪竴涓鐐瑰湪L涓?
if 璇ョ鐐規槸s涓ょ鐐逛腑綰靛潗鏍囪緝澶х殑绔偣
then count ← count+1
else if s鍜孡鐩鎬氦
then count ← count+1;
if count mod 2 = 1
then return true;
else return false;
鍏朵腑鍋氬皠綰縇鐨勬柟娉曟槸錛氳P'鐨勭旱鍧愭爣鍜孭鐩稿悓錛屾í鍧愭爣涓烘鏃犵┓澶э紙寰堝ぇ鐨勪竴涓鏁幫級錛屽垯P鍜孭'灝辯‘瀹氫簡灝勭嚎L銆?
鍒ゆ柇鐐規槸鍚﹀湪澶氳竟褰腑鐨勮繖涓畻娉曠殑鏃墮棿澶嶆潅搴︿負O(n)銆?/p>
鍙﹀榪樻湁涓縐嶇畻娉曟槸鐢ㄥ甫絎﹀彿鐨勪笁瑙掑艦闈㈢Н涔嬪拰涓庡杈瑰艦闈㈢Н榪涜姣旇緝錛岃繖縐嶇畻娉曠敱浜庝嬌鐢ㄦ誕鐐規暟榪愮畻鎵浠ヤ細甯︽潵涓瀹氳宸紝涓嶆帹鑽愬ぇ瀹朵嬌鐢ㄣ?
鍒ゆ柇綰挎鏄惁鍦ㄥ杈瑰艦鍐?/strong>錛?/strong>
綰挎鍦ㄥ杈瑰艦鍐呯殑涓涓繀瑕佹潯浠舵槸綰挎鐨勪袱涓鐐歸兘鍦ㄥ杈瑰艦鍐咃紝浣嗙敱浜庡杈瑰艦鍙兘涓哄嚬錛屾墍浠ヨ繖涓嶈兘鎴愪負鍒ゆ柇鐨勫厖鍒嗘潯浠躲傚鏋滅嚎孌靛拰澶氳竟褰㈢殑鏌愭潯杈瑰唴浜わ紙涓ょ嚎孌靛唴浜ゆ槸鎸囦袱綰挎鐩鎬氦涓斾氦鐐逛笉鍦ㄤ袱綰挎鐨勭鐐癸級錛屽洜涓哄杈瑰艦鐨勮竟鐨勫乏鍙充袱渚у垎灞炲杈瑰艦鍐呭涓嶅悓閮ㄥ垎錛屾墍浠ョ嚎孌典竴瀹氫細鏈変竴閮ㄥ垎鍦ㄥ杈瑰艦澶?瑙佸浘a)銆備簬鏄垜浠緱鍒扮嚎孌靛湪澶氳竟褰㈠唴鐨勭浜屼釜蹇呰鏉′歡錛氱嚎孌靛拰澶氳竟褰㈢殑鎵鏈夎竟閮戒笉鍐呬氦銆?
綰挎鍜屽杈瑰艦浜や簬綰挎鐨勪袱绔偣騫朵笉浼氬獎鍝嶇嚎孌墊槸鍚﹀湪澶氳竟褰㈠唴錛涗絾鏄鏋滃杈瑰艦鐨勬煇涓《鐐瑰拰綰挎鐩鎬氦錛岃繕蹇呴』鍒ゆ柇涓ょ浉閭諱氦鐐逛箣闂寸殑綰挎鏄惁鍖呭惈浜庡杈瑰艦鍐呴儴錛堝弽渚嬭鍥綽)銆?
鍥犳鎴戜滑鍙互鍏堟眰鍑烘墍鏈夊拰綰挎鐩鎬氦鐨勫杈瑰艦鐨勯《鐐癸紝鐒跺悗鎸夌収X-Y鍧愭爣鎺掑簭(X鍧愭爣灝忕殑鎺掑湪鍓嶉潰錛屽浜嶺鍧愭爣鐩稿悓鐨勭偣錛孻鍧愭爣灝忕殑鎺掑湪鍓嶉潰錛岃繖縐嶆帓搴忓噯鍒欎篃鏄負浜嗕繚璇佹按騫沖拰鍨傜洿鎯呭喌鐨勫垽鏂紜?錛岃繖鏍風浉閭葷殑涓や釜鐐瑰氨鏄湪綰挎涓婄浉閭葷殑涓や氦鐐癸紝濡傛灉浠繪剰鐩擱偦涓ょ偣鐨勪腑鐐逛篃鍦ㄥ杈瑰艦鍐咃紝鍒欒綰挎涓瀹氬湪澶氳竟褰㈠唴銆?
璇佹槑濡備笅錛?/p>
鍛介1錛?
濡傛灉綰挎鍜屽杈瑰艦鐨勪袱鐩擱偦浜ょ偣P1 錛孭2鐨勪腑鐐筆' 涔熷湪澶氳竟褰㈠唴錛屽垯P1, P2涔嬮棿鐨勬墍鏈夌偣閮藉湪澶氳竟褰㈠唴銆?/p>
璇佹槑錛?
鍋囪P1,P2涔嬮棿鍚湁涓嶅湪澶氳竟褰㈠唴鐨勭偣錛屼笉濡ㄨ璇ョ偣涓篞錛屽湪P1, P'涔嬮棿錛屽洜涓哄杈瑰艦鏄棴鍚堟洸綰匡紝鎵浠ュ叾鍐呭閮ㄤ箣闂存湁鐣岋紝鑰孭1灞炰簬澶氳竟琛屽唴閮紝Q灞炰簬澶氳竟鎬у閮紝P'灞炰簬澶氳竟鎬у唴閮紝P1-Q-P'瀹屽叏榪炵畫錛屾墍浠1Q鍜孮P'涓瀹氳法瓚婂杈瑰艦鐨勮竟鐣岋紝鍥犳鍦≒1,P'涔嬮棿鑷沖皯榪樻湁涓や釜璇ョ嚎孌靛拰澶氳竟褰㈢殑浜ょ偣錛岃繖鍜孭1P2鏄浉閭諱袱浜ょ偣鐭涚浘錛屾晠鍛介鎴愮珛銆傝瘉姣曘?
鐢卞懡棰?鐩存帴鍙緱鍑烘帹璁猴細
鎺ㄨ2錛?
璁懼杈瑰艦鍜岀嚎孌礟Q鐨勪氦鐐逛緷嬈′負P1,P2,……Pn錛屽叾涓璓i鍜孭i+1鏄浉閭諱袱浜ょ偣錛岀嚎孌礟Q鍦ㄥ杈瑰艦鍐呯殑鍏呰鏉′歡鏄細P錛孮鍦ㄥ杈瑰艦鍐呬笖瀵逛簬i =1, 2,……, n-1錛孭i ,Pi+1鐨勪腑鐐逛篃鍦ㄥ杈瑰艦鍐呫?
鍦ㄥ疄闄呯紪紼嬩腑錛屾病鏈夊繀瑕佽綆楁墍鏈夌殑浜ょ偣錛岄鍏堝簲鍒ゆ柇綰挎鍜屽杈瑰艦鐨勮竟鏄惁鍐呬氦錛屽樿嫢綰挎鍜屽杈瑰艦鐨勬煇鏉¤竟鍐呬氦鍒欑嚎孌典竴瀹氬湪澶氳竟褰㈠錛涘鏋滅嚎孌靛拰澶氳竟褰㈢殑姣忎竴鏉¤竟閮戒笉鍐呬氦錛屽垯綰挎鍜屽杈瑰艦鐨勪氦鐐逛竴瀹氭槸綰挎鐨勭鐐規垨鑰呭杈瑰艦鐨勯《鐐癸紝鍙鍒ゆ柇鐐規槸鍚﹀湪綰挎涓婂氨鍙互浜嗐?
鑷蟲鎴戜滑寰楀嚭綆楁硶濡備笅錛?
if 綰跨PQ鐨勭鐐逛笉閮藉湪澶氳竟褰㈠唴
then return false;
鐐歸泦pointSet鍒濆鍖栦負絀?
for 澶氳竟褰㈢殑姣忔潯杈箂
do if 綰挎鐨勬煇涓鐐瑰湪s涓?
then 灝嗚绔偣鍔犲叆pointSet;
else if s鐨勬煇涓鐐瑰湪綰挎PQ涓?
then 灝嗚绔偣鍔犲叆pointSet;
else if s鍜岀嚎孌礟Q鐩鎬氦 // 榪欐椂鍊欏凡緇忓彲浠ヨ偗瀹氭槸鍐呬氦浜?
then return false;
灝唒ointSet涓殑鐐規寜鐓-Y鍧愭爣鎺掑簭;
for pointSet涓瘡涓や釜鐩擱偦鐐?pointSet[i] , pointSet[ i+1]
do if pointSet[i] , pointSet[ i+1] 鐨勪腑鐐逛笉鍦ㄥ杈瑰艦涓?
then return false;
return true;
榪欎釜榪囩▼涓殑鎺掑簭鍥犱負浜ょ偣鏁扮洰鑲畾榪滃皬浜庡杈瑰艦鐨勯《鐐規暟鐩畁錛屾墍浠ユ渶澶氭槸甯告暟綰х殑澶嶆潅搴︼紝鍑犱箮鍙互蹇界暐涓嶈銆傚洜姝ょ畻娉曠殑鏃墮棿澶嶆潅搴︿篃鏄疧(n)銆?/p>
璁句竴鏉$嚎孌典負L0 = P1P2錛屽彟涓鏉$嚎孌墊垨鐩寸嚎涓篖1 = Q1Q2 錛岃璁$畻鐨勫氨鏄疞0鍜孡1鐨勪氦鐐廣?
1錛?棣栧厛鍒ゆ柇L0鍜孡1鏄惁鐩鎬氦錛堟柟娉曞凡鍦ㄥ墠鏂囪璁鴻繃錛夛紝濡傛灉涓嶇浉浜ゅ垯娌℃湁浜ょ偣錛屽惁鍒欒鏄嶭0鍜孡1涓瀹氭湁浜ょ偣錛屼笅闈㈠氨灝哃0鍜孡1閮界湅浣滅洿綰挎潵鑰冭檻銆?
2錛?濡傛灉P1鍜孭2妯潗鏍囩浉鍚岋紝鍗矻0騫寵浜嶻杞?
a) 鑻1涔熷鉤琛屼簬Y杞達紝
i. 鑻1鐨勭旱鍧愭爣鍜孮1鐨勭旱鍧愭爣鐩稿悓錛岃鏄嶭0鍜孡1鍏辯嚎錛屽亣濡侺1鏄洿綰跨殑璇濅粬浠湁鏃犵┓鐨勪氦鐐癸紝鍋囧L1鏄嚎孌電殑璇濆彲鐢?璁$畻涓ゆ潯鍏辯嚎綰挎鐨勪氦鐐?鐨勭畻娉曟眰浠栦滑鐨勪氦鐐癸紙璇ユ柟娉曞湪鍓嶆枃宸茶璁鴻繃錛夛紱
ii. 鍚﹀垯璇存槑L0鍜孡1騫寵錛屼粬浠病鏈変氦鐐癸紱
b) 鑻1涓嶅鉤琛屼簬Y杞達紝鍒欎氦鐐規í鍧愭爣涓篜1鐨勬í鍧愭爣錛屼唬鍏ュ埌L1鐨勭洿綰挎柟紼嬩腑鍙互璁$畻鍑轟氦鐐圭旱鍧愭爣錛?
3錛?濡傛灉P1鍜孭2妯潗鏍囦笉鍚岋紝浣嗘槸Q1鍜孮2妯潗鏍囩浉鍚岋紝鍗矻1騫寵浜嶻杞達紝鍒欎氦鐐規í鍧愭爣涓篞1鐨勬í鍧愭爣錛屼唬鍏ュ埌L0鐨勭洿綰挎柟紼嬩腑鍙互璁$畻鍑轟氦鐐圭旱鍧愭爣錛?
4錛?濡傛灉P1鍜孭2綰靛潗鏍囩浉鍚岋紝鍗矻0騫寵浜嶺杞?
a) 鑻1涔熷鉤琛屼簬X杞達紝
i. 鑻1鐨勬í鍧愭爣鍜孮1鐨勬í鍧愭爣鐩稿悓錛岃鏄嶭0鍜孡1鍏辯嚎錛屽亣濡侺1鏄洿綰跨殑璇濅粬浠湁鏃犵┓鐨勪氦鐐癸紝鍋囧L1鏄嚎孌電殑璇濆彲鐢?璁$畻涓ゆ潯鍏辯嚎綰挎鐨勪氦鐐?鐨勭畻娉曟眰浠栦滑鐨勪氦鐐癸紙璇ユ柟娉曞湪鍓嶆枃宸茶璁鴻繃錛夛紱
ii. 鍚﹀垯璇存槑L0鍜孡1騫寵錛屼粬浠病鏈変氦鐐癸紱
b) 鑻1涓嶅鉤琛屼簬X杞達紝鍒欎氦鐐圭旱鍧愭爣涓篜1鐨勭旱鍧愭爣錛屼唬鍏ュ埌L1鐨勭洿綰挎柟紼嬩腑鍙互璁$畻鍑轟氦鐐規í鍧愭爣錛?
5錛?濡傛灉P1鍜孭2綰靛潗鏍囦笉鍚岋紝浣嗘槸Q1鍜孮2綰靛潗鏍囩浉鍚岋紝鍗矻1騫寵浜嶺杞達紝鍒欎氦鐐圭旱鍧愭爣涓篞1鐨勭旱鍧愭爣錛屼唬鍏ュ埌L0鐨勭洿綰挎柟紼嬩腑鍙互璁$畻鍑轟氦鐐規í鍧愭爣錛?
6錛?鍓╀笅鐨勬儏鍐靛氨鏄疞1鍜孡0鐨勬枩鐜囧潎瀛樺湪涓斾笉涓?鐨勬儏鍐?
a) 璁$畻鍑篖0鐨勬枩鐜嘖0錛孡1鐨勬枩鐜嘖1 錛?
b) 濡傛灉K1 = K2
i. 濡傛灉Q1鍦↙0涓婏紝鍒欒鏄嶭0鍜孡1鍏辯嚎錛屽亣濡侺1鏄洿綰跨殑璇濇湁鏃犵┓浜ょ偣錛屽亣濡侺1鏄嚎孌電殑璇濆彲鐢?璁$畻涓ゆ潯鍏辯嚎綰挎鐨勪氦鐐?鐨勭畻娉曟眰浠栦滑鐨勪氦鐐癸紙璇ユ柟娉曞湪鍓嶆枃宸茶璁鴻繃錛夛紱
ii. 濡傛灉Q1涓嶅湪L0涓婏紝鍒欒鏄嶭0鍜孡1騫寵錛屼粬浠病鏈変氦鐐廣?
c) 鑱旂珛涓ょ洿綰跨殑鏂圭▼緇勫彲浠ヨВ鍑轟氦鐐規潵
榪欎釜綆楁硶騫朵笉澶嶆潅錛屼絾鏄鍒嗘儏鍐佃璁烘竻妤氾紝灝ゅ叾鏄綋涓ゆ潯綰挎鍏辯嚎鐨勬儏鍐甸渶瑕佸崟鐙冭檻錛屾墍浠ュ湪鍓嶆枃灝嗘眰涓ゆ潯鍏辯嚎綰挎鐨勭畻娉曞崟鐙啓鍑烘潵銆傚彟澶栵紝涓寮濮嬪氨鍏堝埄鐢ㄧ煝閲忓弶涔樺垽鏂嚎孌典笌綰挎錛堟垨鐩寸嚎錛夋槸鍚︾浉浜わ紝濡傛灉緇撴灉鏄浉浜わ紝閭d箞鍦ㄥ悗闈㈠氨鍙互灝嗙嚎孌靛叏閮ㄧ湅浣滅洿綰挎潵鑰冭檻銆傞渶瑕佹敞鎰忕殑鏄紝鎴戜滑鍙互灝嗙洿綰挎垨綰挎鏂圭▼鏀瑰啓涓篴x+by+c=0鐨勫艦寮忥紝榪欐牱涓鏉ヤ笂榪拌繃紼嬬殑閮ㄥ垎姝ラ鍙互鍚堝茍錛岀緝鐭簡浠g爜闀垮害錛屼絾鏄敱浜庡厛瑕佹眰鍑哄弬鏁幫紝榪欑綆楁硶灝嗚姳璐規洿澶氱殑鏃墮棿銆?
璁懼渾蹇冧負O錛屽渾鍗婂緞涓簉錛岀洿綰匡紙鎴栫嚎孌碉級L涓婄殑涓ょ偣涓篜1,P2銆?
1. 濡傛灉L鏄嚎孌典笖P1錛孭2閮藉寘鍚湪鍦哋鍐咃紝鍒欐病鏈変氦鐐癸紱鍚﹀垯榪涜涓嬩竴姝ャ?
2. 濡傛灉L騫寵浜嶻杞達紝
a) 璁$畻鍦嗗績鍒癓鐨勮窛紱籨is錛?
b) 濡傛灉dis > r 鍒橪鍜屽渾娌℃湁浜ょ偣錛?
c) 鍒╃敤鍕捐偂瀹氱悊錛屽彲浠ユ眰鍑轟袱浜ょ偣鍧愭爣錛屼絾瑕佹敞鎰忚冭檻L鍜屽渾鐨勭浉鍒囨儏鍐點?
3. 濡傛灉L騫寵浜嶺杞達紝鍋氭硶涓嶭騫寵浜嶻杞寸殑鎯呭喌綾諱技錛?
4. 濡傛灉L鏃笉騫寵X杞翠篃涓嶅鉤琛孻杞達紝鍙互姹傚嚭L鐨勬枩鐜嘖錛岀劧鍚庡垪鍑篖鐨勭偣鏂滃紡鏂圭▼錛屽拰鍦嗘柟紼嬭仈绔嬪嵆鍙眰瑙e嚭L鍜屽渾鐨勪袱涓氦鐐癸紱
5. 濡傛灉L鏄嚎孌碉紝瀵逛簬2錛?錛?涓眰鍑虹殑浜ょ偣榪樿鍒嗗埆鍒ゆ柇鏄惁灞炰簬璇ョ嚎孌電殑鑼冨洿鍐呫?/p>
浜屻?nbsp;綰挎鍙婄洿綰跨殑鍩烘湰榪愮畻
1. 鐐逛笌綰挎鐨勫叧緋?3
2. 姹傜偣鍒扮嚎孌墊墍鍦ㄧ洿綰垮瀭綰跨殑鍨傝凍 4
3. 鐐瑰埌綰挎鐨勬渶榪戠偣 4
4. 鐐瑰埌綰挎鎵鍦ㄧ洿綰跨殑璺濈 4
5. 鐐瑰埌鎶樼嚎闆嗙殑鏈榪戣窛紱?4
6. 鍒ゆ柇鍦嗘槸鍚﹀湪澶氳竟褰㈠唴 5
7. 姹傜煝閲忓す瑙掍綑寮?5
8. 姹傜嚎孌典箣闂寸殑澶硅 5
9. 鍒ゆ柇綰挎鏄惁鐩鎬氦 6
10.鍒ゆ柇綰挎鏄惁鐩鎬氦浣嗕笉浜ゅ湪绔偣澶勶紙鍐呬氦錛?6
11.姹傜嚎孌墊墍鍦ㄧ洿綰跨殑鏂圭▼ 6
12.姹傜洿綰跨殑鏂滅巼 7
13.姹傜洿綰跨殑鍊炬枩瑙?7
14.姹傜偣鍏充簬鏌愮洿綰跨殑瀵圭О鐐?7
15.鍒ゆ柇涓ゆ潯鐩寸嚎鏄惁鐩鎬氦鍙婃眰鐩寸嚎浜ょ偣 7
16.鍒ゆ柇綰挎鏄惁鐩鎬氦錛屽鏋滅浉浜よ繑鍥炰氦鐐?7
涓夈佸杈瑰艦甯哥敤綆楁硶妯″潡
1. 鍒ゆ柇澶氳竟褰㈡槸鍚︾畝鍗曞杈瑰艦 8
2. 媯鏌ュ杈瑰艦欏剁偣鐨勫嚫鍑規?9
3. 鍒ゆ柇澶氳竟褰㈡槸鍚﹀嚫澶氳竟褰?9
4. 姹傚杈瑰艦闈㈢Н 9
5. 鍒ゆ柇澶氳竟褰㈤《鐐圭殑鎺掑垪鏂瑰悜錛屾柟娉曚竴 10
6. 鍒ゆ柇澶氳竟褰㈤《鐐圭殑鎺掑垪鏂瑰悜錛屾柟娉曚簩 10
7. 灝勭嚎娉曞垽鏂偣鏄惁鍦ㄥ杈瑰艦鍐?10
8. 鍒ゆ柇鐐規槸鍚﹀湪鍑稿杈瑰艦鍐?11
9. 瀵繪壘鐐歸泦鐨刧raham綆楁硶 12
10.瀵繪壘鐐歸泦鍑稿寘鐨勫嵎鍖呰9娉?13
11.鍒ゆ柇綰挎鏄惁鍦ㄥ杈瑰艦鍐?14
12.姹傜畝鍗曞杈瑰艦鐨勯噸蹇?錛圚DU1115錛?5
13.姹傚嚫澶氳竟褰㈢殑閲嶅績 17
14.姹傝偗瀹氬湪緇欏畾澶氳竟褰㈠唴鐨勪竴涓偣 17
15.姹備粠澶氳竟褰㈠涓鐐瑰嚭鍙戝埌璇ュ杈瑰艦鐨勫垏綰?18
16.鍒ゆ柇澶氳竟褰㈢殑鏍告槸鍚﹀瓨鍦?19
鍥涖?鍦嗙殑鍩烘湰榪愮畻
1 .鐐規槸鍚﹀湪鍦嗗唴 20
2 .姹備笉鍏辯嚎鐨勪笁鐐規墍紜畾鐨勫渾 21
浜斻佺煩褰㈢殑鍩烘湰榪愮畻
1.宸茬煡鐭╁艦涓夌偣鍧愭爣錛屾眰絎?鐐瑰潗鏍?22
鍏佸父鐢ㄧ畻娉曠殑鎻忚堪 22
涓冦佽ˉ鍏?
1錛庝袱鍦嗗叧緋伙細 24
2錛庡垽鏂渾鏄惁鍦ㄧ煩褰㈠唴錛?24
3錛庣偣鍒板鉤闈㈢殑璺濈錛?25
4錛庣偣鏄惁鍦ㄧ洿綰垮悓渚э細 25
5錛庨暅闈㈠弽灝勭嚎錛?25
6錛庣煩褰㈠寘鍚細 26
7錛庝袱鍦嗕氦鐐癸細 27
8錛庝袱鍦嗗叕鍏遍潰縐細 28
9. 鍦嗗拰鐩寸嚎鍏崇郴錛?29
10. 鍐呭垏鍦嗭細 30
11. 姹傚垏鐐癸細 31
12. 綰挎鐨勫乏鍙蟲棆錛?31
13錛庡叕寮忥細 32
闄勪笂涓綃囧崥瀹細璁$畻鍑犱綍綆楁硶姒傝
zoj涓婄殑璁$畻鍑犱綍棰?/span>
Vol I
1010 by pandahyx
1032 by javaman
1037 by Vegetable Bird
1041 by javaman
1081 by Vegetable Bird
1090 by Vegetable Bird
Vol II
1104 by javaman
1123 by javaman
1139 by Vegetable Bird
1165 by javaman
1199 by Vegetable Bird
Vol V
1426 by Vegetable Bird
1439 by Vegetable Bird
1460 by Vegetable Bird
1472 by Vegetable Bird
Vol VI
1597 by Vegetable Bird
Vol VII
1608 by Vegetable Bird
1648 by Vegetable Bird
Vol XII
2102 by pandahyx
2107 by pandahyx
2157 by pandahyx
Vol XIII
2234 by pandahyx
Vol XIV
2318 by ahyangyi
2394 by qherlyt
Vol XV
2403 by Vegetable Bird
#include<stdio.h>
#include<math.h>
struct TPoint
{
float x;
float y;
};
//姹傚弶縐?/span>
float mul(struct TPoint p1, struct TPoint p2, struct TPoint p0)
{
return ((p1.x - p0.x)*(p2.y - p0.y)-(p2.x - p0.x)*(p1.y - p0.y));
}
/**//*鐢變笁涓《鐐瑰悜鎵姹傜殑鐐瑰紩鍑虹煝閲忥紙娉ㄦ剰鏂瑰悜錛夛紝鐒跺悗浠繪剰鐢ㄥ叾涓袱涓煝閲忓艦鎴愬鉤闈紝
* 鍐嶇敤榪欎釜騫抽潰鍜屽墿涓嬬殑鐭㈤噺鍙変箻錛屽緱鍑轟竴涓柊鐭㈤噺錛屾柟鍚戝悜閲岋紝鍒欏湪涓夎褰㈠錛屽弽涔嬪湪閲岄潰銆?br>
*/
int inside(struct TPoint tr[], struct TPoint p)
{
int i;
for (i = 0; i < 3; i++)
if (mul(p, tr[i], tr[(i + 1) % 3]) * mul(p, tr[(i + 2) % 3], tr[(i + 1) % 3]) > 0)
return 0;
return 1;
}

float area(struct TPoint p1, struct TPoint p2, struct TPoint p3)
{
return fabs((p1.x - p3.x)*(p2.y - p3.y)-(p2.x - p3.x)*(p1.y - p3.y));
}
//鐢ㄩ潰縐垽鏂璸鏄惁鍦ㄤ笁瑙掑艦鍐?/span>
int inside2(struct TPoint tr[], struct TPoint p)
{
if (fabs(area(tr[0], tr[1], tr[2]) -
area(p, tr[1], tr[2]) -
area(tr[0], p, tr[2]) -
area(tr[0], tr[1], p)) < 1.0e-20)
return 1;
else
return 0;
}

int main()
{
struct TPoint tr[3] =
{
{-1, 1},
{1, 0},
{3, 0}}, p =
{1, 2};
//鏂規硶涓
printf("algorithm 1:");
if (inside(tr, p))
printf("In\n");
else
printf("Out\n");
//鏂規硶涓
printf("algorithm 2:");
if (inside2(tr, p))
printf("In\n");
else
printf("Out\n");
}
#include<stdio.h>
#include<math.h>
struct point
{
double x,y,len;
}p[1002];
int main()

{
int n,m,i,j,ca=1;
double ave,len,ax,ay;
while(scanf("%d%d",&n,&m)!=EOF)
{
p[0].x=0; p[0].y=0; ave=0;
for(i=1;i<=n;i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
p[i].len=sqrt((p[i].x-p[i-1].x)*(p[i].x-p[i-1].x)+(p[i].y-p[i-1].y)*(p[i].y-p[i-1].y));
//printf("%.3f %.3f %.3f\n",p[i].x,p[i].y,p[i].len);
ave+=p[i].len;
}
ave/=(m+1); //姣忎竴浠界殑鍧囬暱
j=0; //娌跨潃綰挎璧?br>
// printf("%.3f\n",ave);
printf("Route %d\n",ca++);
for(i=1;i<=m;i++)
{
len=0;
for(; j<n;j++)
{
if(len+p[j+1].len>ave)
break;
len+=p[j+1].len;
}
double res=ave-len;
//printf("%d %.3f\n",j,res);
ax=p[j].x+(res/p[j+1].len)*(p[j+1].x-p[j].x);
ay=p[j].y+(res/p[j+1].len)*(p[j+1].y-p[j].y);
printf("CP%d: (%.3lf, %.3lf)\n",i,ax,ay);
p[j].x=ax; p[j].y=ay;
p[j+1].len=sqrt((p[j+1].x-p[j].x)*(p[j+1].x-p[j].x)+(p[j+1].y-p[j].y)*(p[j+1].y-p[j].y));
}
}
return 0;
}