锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鐪嬬湅榪欎釜浠g爜錛屾憳褰曡嚜gameobject
2 """Initialise a vector
3
4 @type x: number
5 @param x: The x value (defaults to 0.), or a container of 2 values
6 @type x: number
7 @param y: The y value (defaults to 0.)
8
9 """
10 if hasattr(x, "__getitem__"):
11 x, y = x
12 self._v = [float(x), float(y)]
13 else:
14 self._v = [float(x), float(y)]
]]>
楂樻柉娑堝厓娉曠敤浜庤В鍐崇嚎鎬т唬鏁版眰澶氬厓鏂圭▼緇勭殑瑙o紝鎴栬呯敤浜庢眰鍙嗙煩闃電殑閫?br />鍢垮樋錛宲ython浠g爜鐜版垚鍙敤錛?br />
"""Puts given matrix (2D array) into the Reduced Row Echelon Form.
Returns True if successful, False if 'm' is singular.
NOTE: make sure all the matrix items support fractions! Int matrix will NOT work!
Written by J. Elonen in April 2005, released into Public Domain"""
(h, w) = (len(m), len(m[0]))
for y in range(0,h):
maxrow = y
for y2 in range(y+1, h): # Find max pivot
if abs(m[y2][y]) > abs(m[maxrow][y]):
maxrow = y2
(m[y], m[maxrow]) = (m[maxrow], m[y])
if abs(m[y][y]) <= eps: # Singular?
return False
for y2 in range(y+1, h): # Eliminate column y
c = m[y2][y] / m[y][y]
for x in range(y, w):
m[y2][x] -= m[y][x] * c
for y in range(h-1, 0-1, -1): # Backsubstitute
c = m[y][y]
for y2 in range(0,y):
for x in range(w-1, y-1, -1):
m[y2][x] -= m[y][x] * m[y2][y] / c
m[y][y] /= c
for x in range(h, w): # Normalize row y
m[y][x] /= c
return True
綆楁硶浼唬鐮?
i := 1
while (i ≤ m and j ≤ n) do
Find pivot in column j, starting in row i:
maxi := i
for k := i+1 to m do
if abs(A[k,j]) > abs(A[maxi,j]) then
maxi := k
end if
end for
if A[maxi,j] ≠ 0 then
swap rows i and maxi, but do not change the value of i
Now A[i,j] will contain the old value of A[maxi,j].
divide each entry in row i by A[i,j]
Now A[i,j] will have the value 1.
for u := i+1 to m do
subtract A[u,j] * row i from row u
Now A[u,j] will be 0, since A[u,j] - A[i,j] * A[u,j] = A[u,j] - 1 * A[u,j] = 0.
end for
i := i + 1
end if
j := j + 1
end while
]]>
form numpy import *
m = mat('1 2 3;4 5 6;7 8 9')
mi = LA.inv(m)
print mi
]]>
GIS鏄竴涓浘褰㈢郴緇燂紝蹇呯劧浼氭秹鍙婂埌鍑犱綍瀛︾殑鐞嗚搴旂敤錛屾瘮濡傦紝鍥懼艦鍙鍖栵紝絀洪棿鎷撴墤鍒嗘瀽錛孏IS鍥懼艦緙栬緫絳夐兘闇瑕佺敤鍒板嚑浣?br>
銆傚悜閲忓嚑浣曟槸鐢ㄤ唬鏁扮殑鏂規硶鏉ョ爺絀跺嚑浣曢棶棰橈紝棣栧厛錛岃澶у緲諱竴緲婚珮絳夋暟瀛﹂噷鏈夊叧鍚戦噺鐨勭珷鑺傦紝鐔熸倝涓涓嬪嚑涓噸瑕佺殑姒傚康錛?br>
鍚戦噺銆佸悜閲忕殑妯°佸悜閲忕殑鍧愭爣琛ㄧず銆佸悜閲忕殑鍔犲噺榪愮畻銆佸悜閲忕殑鐐圭Н銆佸悜閲忕殑鍙夌Н錛屼互鍙婅繖浜涙蹇電殑鍑犱綍鎰忎箟...涓嬮潰鎴戜滑灝嗙敤
榪欎簺鍩烘湰姒傚康鏉ヨВ絳擥IS涓竴浜涘嚑浣曢棶棰樸?br>1 鐐瑰拰綰跨殑鍏崇郴
鐐規槸鍚﹀湪綰挎涓婏紝榪欐牱鐨勫垽鏂湪鍥懼艦緙栬緫錛屾嫇鎵戝垽鏂?姣斿錛孏PS璺熻釜鐐規槸鍚﹁窇鍦ㄧ嚎涓?闇瑕佺敤鍒拌繖鏍風殑鍒ゆ柇銆傞氬父鐨?br>
鎯蟲硶鏄細鍏堟眰綰挎鐨勭洿綰挎柟紼嬶紝鍐嶅垽鏂偣鏄惁絎﹀悎榪欐潯鐩寸嚎鏂圭▼錛屽鏋滅鍚堬紝榪樿鍒ゆ柇鐐規槸鍚﹀湪綰挎鎵鍦ㄧ殑鐭╁艦鍖哄煙(MBR)鍐?br>
錛屼互鎺掗櫎寤墮暱綰夸笂鐨勫彲鑳芥э紝濡傛灉涓嶇鍚堬紝鍒欑偣涓嶅湪綰挎涓娿傝繖縐嶆濊礬鏄彲琛岀殑錛屼絾鏁堢巼涓嶉珮錛屾秹鍙婂埌寤虹珛鏂圭▼錛岃В鏂圭▼銆?br>
鍊熷姪鍚戦噺鐨勫弶縐紙涔熷彨鍚戦噺鐨勫悜閲忕Н錛岀粨鏋滆繕鏄悜閲忥紝鏈夋柟鍚戠殑錛夊彲浠ュ緢瀹規槗鐨勫垽鏂傝鍚戦噺a=(Xa,Ya,Za) b=(Xb,Yb,Zb)
鍚戦噺鍙夌Нa X b濡備笅錛?br>
浜岀淮鍚戦噺鍙夌Н鐨勬ā |a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb| 錛?#945;鏄悜閲廰,b涔嬮棿鐨勫す瑙掞級錛屽悜閲忓弶縐ā鐨勫嚑浣曟剰涔夋槸浠ュ悜閲廰,b
涓洪偦杈圭殑騫寵鍥涜竟褰㈢殑闈㈢Н銆傚彲浠ユ帹嫻嬶細濡傛灉涓ゅ悜閲忓叡綰匡紝鍚戦噺鍙夌Н妯?鎵浠h〃鐨?br>
騫寵鍥涜竟褰㈢殑闈㈢Н) 涓洪浂 鍒?nbsp;
|a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb|=0,鍚﹀垯涓嶅叡綰匡紝鍙夌Н鐨勬ā涓洪潪闆訛紝鏍規嵁榪欐牱鏉′歡鍙互寰堣交鏉劇殑鍒ゆ柇鐐瑰拰綰跨殑鍏崇郴錛岄伩
鍏嶄簡寤虹珛鏂圭▼鍜岃В鏂圭▼鐨勯夯鐑︺?br>
鍚戦噺鍙夌Н鐨勬ā|AB X AC|=0鍗沖彲鍒ゆ柇C鐐瑰湪AB鎵紜畾鐨勭洿綰夸笂錛屽啀緇撳悎C鐐規槸鍚﹀湪AB鎵鍦ㄧ殑MBR鑼冨洿鍐咃紝灝卞彲浠ユ渶緇堢‘
瀹欳鏄惁鍦ˋB綰挎涓娿傚叧浜庣偣鍜岀嚎孌電殑鍏朵粬鍏崇郴錛岄兘鍙互閫氳繃鍙夌Н鐨勬眰寰楋紝姣斿 鍒ゆ柇鐐瑰湪綰跨殑鍝竴渚э紝鍙蟲墜娉曞垯錛屽彲浠ラ氳繃a
X b= (Xa*Yb-Ya*Xb)*k涓殑錛圶a*Yb-Ya*Xb錛夋璐熸潵鍒ゆ柇銆傜暀緇欏ぇ瀹舵濊冿紝寰堢畝鍗曠殑錛屽懙鍛?#8230;
2 綰垮拰綰跨殑鍏崇郴
鍒ゆ柇涓ゆ潯綰挎鏄惁鐩鎬氦錛屽湪寰堝鎷撴墤鍒ゆ柇鍜屽浘褰㈢紪杈?(姣斿錛岀嚎鐨勬墦鏂潵鏋勫緩鎷撴墤錛岀紪杈戠嚎瀵硅薄錛屽彔緗垎鏋愶紝闈笌
闈㈠叧緋葷殑鍒ゆ柇絳? 涓兘闇瑕佺敤鍒扮嚎綰跨浉浜ょ殑鍒ゆ柇錛屽鏋滀袱鏉$嚎孌電浉浜わ紝涓鏉$嚎孌電殑涓ょ鐐瑰繀鐒朵綅浜庡彟涓鏉$嚎孌電殑涓や晶錛堜笉鑰?br>
铏戦鍖栨儏鍐碉紝涔熷氨鏄竴鏉$嚎孌電殑绔偣鍦ㄥ彟涓鏉$嚎孌典笂錛岃繖涓緢瀹規槗鍒ゆ柇錛?br>
涓ゅ悜閲忕殑鍙夌Нa X b= (Xa*Yb-Ya*Xb)*k 錛屽垎鍒垽鏂瑼B X AC鐨勬柟鍚戜笌AB X AD鐨勬柟鍚戞槸鍚﹀紓鍙鳳紝鍐嶅垽鏂瑿D X CA 鐨勬柟鍚戜笌CD X
CB鐨勬柟鍚戞槸鍚﹀紓鍙鳳紝鍗沖彲鍒ゆ柇涓ょ嚎孌墊槸鍚︾浉浜ゃ?br>
閫鍖栨儏鍐碉紝鍗充竴鏉$嚎鐨勭鐐硅惤鍦ㄥ彟涓鏉$嚎涓娿傝繍鐢?#8221;鐐規槸鍚﹀湪綰挎涓?#8221;鐨勬柟娉曟潵鍒ゅ畾銆傝緇嗗尯鍒嗙暀緇欏ぇ瀹舵濊冦傚懙鍛?#8230;
鍒╃敤鍚戦噺鐨勬柟鍚戣繕鍙互鍒ゆ柇綰挎鐨勮漿鍚戯紝榪欎釜鍦ㄩ亾璺鑸腑鏈夋墍搴旂敤錛?br>3 鐐瑰拰闈㈢殑鍏崇郴
鍦ㄥ悇縐嶆嫇鎵戝垽鏂腑錛堟瘮濡傦紝闈㈠璞$殑閫夊彇錛屽寘鍚叧緋葷殑鍒ゆ柇絳夛級闇瑕佸垽鏂竴涓偣鏄惁浣嶄簬鏌愪釜闈㈠唴錛岀粡鍏哥殑鏂規硶灝辨槸“鍨傜嚎娉?br>
”錛屽湪鐩磋鍧愭爣緋諱腑錛屼粠榪欎釜鐐瑰悜X杞翠綔灝勭嚎錛屽垽鏂皠綰夸笌澶氳竟褰㈢殑浜ょ偣涓暟錛堜笉鑰冭檻閫鍖栨儏鍐碉紝閫鍖栨儏鍐典笅錛屽垽鏂偣鎴栬呭皠
綰夸笌澶氳竟褰㈢鐐規垨鑰呰竟鐨勫叧緋伙級錛屽鏋滀負濂囨暟錛屽垯鐐瑰湪闈㈠唴錛屼負鍋舵暟錛屽垯鐐瑰湪闈㈠銆?br>4 綰垮拰闈㈢殑鍏崇郴
綰塊潰鍏崇郴鐨勫垽鏂浉瀵規瘮杈冨鏉傦紝綰垮湪闈㈠唴錛岀嚎鍜岄潰鐩鎬氦錛岀浉紱伙紝鐩告帴絳夊叧緋匯傜嚎孌靛湪闈㈠唴錛岀涓涓繀瑕佹潯浠舵槸錛岀嚎孌電殑涓や釜
绔偣閮借鍦ㄥ唴銆備絾鐢變簬澶氳竟褰㈠彲鑳戒負鍑癸紝鎵浠ヨ繖涓嶈兘鎴愪負鍒ゆ柇鐨勫厖鍒嗘潯浠訛紝浜庢槸鏈夌浜屼釜蹇呰鏉′歡綰挎涓庡杈瑰艦鐨勮竟錛屾病鏈?br>
鍐呴儴浜ょ偣銆?br>
綰挎鍜屽杈瑰艦浜や簬綰挎鐨勪袱绔偣騫朵笉浼氬獎鍝嶇嚎孌墊槸鍚﹀湪澶氳竟褰㈠唴錛涗絾鏄鏋滃杈瑰艦鐨勬煇涓《鐐瑰拰綰挎鐩鎬氦錛岃繕蹇呴』
鍒ゆ柇涓ょ浉閭諱氦鐐逛箣闂寸殑綰挎鏄惁鍖呭惈浜庡杈瑰艦鍐呴儴錛屽鏋滃湪闈㈠唴錛屽垯綰挎鍦ㄩ潰鍐咃紝鍚﹀垯涓嶅湪闈㈠唴銆?br>
鎵浠ワ紝綆楁硶鎬濊礬濡備笅錛堟湰綆楁硶寮曠敤緗戠粶涓婁竴綃囨枃绔狅級錛?br>
if 綰挎PQ鐨勭鐐逛笉閮藉湪澶氳竟褰㈠唴
then return false;
鐐歸泦pointSet鍒濆鍖栦負絀?
for 澶氳竟褰㈢殑姣忔潯杈箂
do if 綰挎鐨勬煇涓鐐瑰湪s涓?br> then 灝嗚绔偣鍔犲叆pointSet;
else if s鐨勬煇涓鐐瑰湪綰挎PQ涓?br> then 灝嗚绔偣鍔犲叆pointSet;
else if s鍜岀嚎孌礟Q鐩鎬氦 // 榪欐椂鍊欏凡緇忓彲浠ヨ偗瀹氭槸鍐呬氦浜?br> then return false;
灝唒ointSet涓殑鐐規寜鐓-Y鍧愭爣鎺掑簭;
for pointSet涓瘡涓や釜鐩擱偦鐐?pointSet[i] , pointSet[ i+1]
do if pointSet[i] , pointSet[ i+1] 鐨勪腑鐐逛笉鍦ㄥ杈瑰艦涓?br> then return false;
return true;
娉細X-Y鍧愭爣鎺掑簭錛孹鍧愭爣灝忕殑鎺掑湪鍓嶉潰錛屽浜嶺鍧愭爣鐩稿悓鐨勭偣錛孻鍧愭爣灝忕殑鎺掑湪鍓嶉潰錛岃繖縐嶆帓搴忓噯鍒欎篃鏄負浜嗕繚璇佹按騫沖拰鍨傜洿
鎯呭喌鐨勫垽鏂紜?br>
1. 鐐瑰湪闈㈠唴錛岀嚎孌電浉浜ゆ儏鍐電殑鍒ゆ柇瑙佷笂闈㈢殑鎬濊礬銆?br>
2. 榪欎釜榪囩▼涓殑鎺掑簭鍥犱負浜ょ偣鏁扮洰鑲畾榪滃皬浜庡杈瑰艦鐨勯《鐐規暟鐩畁錛屾墍浠ユ渶澶氭槸甯告暟綰х殑澶嶆潅搴︼紝鍑犱箮鍙互蹇界暐涓嶈
銆傚洜姝ょ畻娉曠殑鏃墮棿澶嶆潅搴︿篃鏄疧(n)銆?br>
3. 鏈変簡綰挎鍜岄潰鐨勫叧緋伙紝鍐嶅垽鏂姌綰夸笌闈㈢殑鍏崇郴錛屼篃灝卞彲浠or寰幆錛屽悓鐞嗚繘琛屽垽鏂簡錛屼絾鏃墮棿澶嶆潅搴﹀皢鏄疧(n^2)銆?br>
鍚庨潰灝嗕粙緇嶄竴縐嶆椂闂村鏉傚害涓篛(nlogn)鐨?#8221;騫抽潰鎵弿綆楁硶”銆?br>
5 闈㈠拰闈㈢殑鍏崇郴
闈㈤潰鐨勭┖闂村叧緋伙紝鍙兘瑕佹洿澶嶆潅涓浜涳紝鍦ㄦ嫇鎵戝垽鏂紝澶氳竟褰㈠彔緗垎鏋愶紝闈㈠璞$殑緙栬緫涓紝鏈夌潃騫挎硾鐨勫簲鐢ㄣ傝繖涓皢鍦ㄤ互鍚庣殑
绔犺妭涓粙緇嶄竴縐嶆椂闂村鏉傚害涓篛錛坣logn錛夌殑綆楁硶“騫抽潰鎵弿綆楁硶”銆?br>6 鐐瑰埌綰挎鐨勮窛紱?br> 鐐瑰埌綰挎鐨勮窛紱伙紝鍦ㄥ悇縐嶆祴閲忥紝鎷撴墤鍒ゆ柇(姣斿錛岀嚎瀵硅薄鐨勯夊彇涓渶瑕佹瘮杈冭窛紱?涓兘闇瑕佺敤鍒般傚ぇ瀹跺鐐瑰埌鐩寸嚎鐨?br>
璺濈錛岄兘寰堢啛鎮夛紝閭g偣鍒扮嚎孌佃窛紱誨張璇ュ浣曡綆楀憿錛?br>
闂鐨勫叧閿槸鍒ゆ柇a銆乺鐨勮搴︼紝鍚戦噺鐨勭偣縐兘鍒ゆ柇涓涓鏄挐瑙掕繕鏄攼瑙掞紝鍏堝涔犱竴涓嬪悜閲忕殑鐐圭Н錛屼篃鍙悜閲忕殑鏁?br>
閲忕Н,緇撴灉鏄竴涓暟錛屾病鏈夋柟鍚戙傝鍚戦噺a=(Xa,Ya,Za) b=(Xb,Yb,Zb)
a . b=|a|*|b|*cosα=Xa*Xb+Ya*Yb+Za*Zb 鍚戦噺鐐圭Н鐨勫嚑浣曟剰涔夋槸錛岄珮涓墿鐞嗕腑錛屾眰浣滅敤鍔涘湪涓涓柟鍚戜笂鎵浣滅殑鍔熴傚鏋渁 .
b>0錛屽垯α涓洪攼瑙掞紝a . b<0,鍒?#945;閽濊銆?br>
鐔熸倝浜嗗埄鐢ㄥ悜閲忕殑鐐圭Н鏉ュ垽鏂搴︼紝AC·AB 鍒ゆ柇澶硅a錛孊A·BC鍒ゆ柇澶硅r錛屽嵆鍙‘瀹氫笁縐嶆儏鍐典腑錛屽叿浣撴槸鍝竴縐嶃傝嚦浜庣涓縐?br>
鎯呭喌錛屾眰鐐瑰埌鍨傝凍鐨勮窛紱伙紝鍙互楗跺紑寤虹珛鏂圭▼姹傚瀭瓚籌紝鍐嶆眰涓ょ偣璺濈鐨勬濊礬錛屽洜涓哄緩绔嬫柟紼嬭繍綆楁槸澶嶆潅鐨勶紝澶氳椾簡CPU璧勬簮銆?br>
鍒╃敤鍚戦噺鍙夌Н鐨勫嚑浣曟剰涔夋潵姹傦紝鍚戦噺鐨勫弶縐〃紺轟互涓ゅ悜閲忎負閭昏竟鐨勫鉤琛屽洓杈瑰艦鐨勯潰縐紝|AC X AB|涓衡娍ABC鐨勯潰縐殑涓ゅ嶏紝姹?br>
騫寵鍥涜竟褰㈢殑楂?鍙鐢ㄩ潰縐櫎浠ュ簳杈笰B鐨勯暱搴︺傚嵆錛岄珮CD鐨勯暱搴?|AC X AB|/distance(AB)銆?br>
榪欎簺澶嶆潅鐨勫嚑浣曞垽鏂紝閮藉皢鍦ㄧ┖闂寸儲寮曠殑榪囨護涓嬶紝鍦ㄥ皯閲忔暟鎹泦(渚夐泦)涓婅繘琛屻傝綆楀嚑浣曠畻娉曪紝閫氬父鏄瘮杈冨鏉傦紝姣旇緝鑰?br>
CPU璧勬簮錛岃屼笖榪樿鑰冭檻鍚勭閫鍖栨儏鍐碉紝鍦ㄨ繖閲岋紝騫朵笉璇曞浘鍚戝ぇ瀹剁┓涓懼悇縐嶆儏鍐碉紝鍙兂璧蜂竴涓姏鐮栧紩鐜夌殑浣滅敤錛?鎴栬榪樻湁浜?br>
浼氭湁榪欐牱鐨勭枒铏戯細鏈夋病鑰冭檻“鎶曞獎”鐨勯棶棰橈紵鍏充簬鎶曞獎灝嗗湪鐩稿簲鐨勭珷鑺備腑緇欎簣瑙i噴錛屼絾鏈変竴鐐規槸鍙互鑲畾鐨勶紝絀洪棿鍒嗘瀽銆佽綆?br>
鍑犱綍綆楁硶錛岄兘鏄湪騫抽潰鐩磋鍧愭爣緋諱笅榪愮畻鐨勶紝涓嶄細鍦ㄧ悆闈笂銆?br>
]]>