當前位置:首頁 » 操作系統 » 水起市源碼

水起市源碼

發布時間: 2023-01-12 08:23:20

A. 求一個能實現屏幕水波紋效果的vb代碼

'補模塊3文件。一個放不下。
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
' 渲染子程序,將新的幀數據渲染到 lpDIBitsRender 中
' 演算法
' posx = Wave1(x-1,y)-Wave1(x+1,y)+x
' posy = Wave1(x,y-1)-Wave1(x,y+1)+y
' SourceBmp(x,y) = DestBmp(posx,posy)
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub WaveRender(lpWaveObject As WAVE_OBJECT)
Dim dwPosX As Long, dwPosY As Long, dwPtrSource As Long, dwPtrDest As Long, dwFlag As Long
Dim lpWave1 As Long, LineIdx As Long, LinePtr As Long
Dim lpDIBitsSource As Long, lpDIBitsRender As Long
Dim I As Long, J As Long
dwFlag = 0
With lpWaveObject
'Debug.Print "WaveRender " & .dwFlag
If (.dwFlag And F_WO_ACTIVE) = 0 Then Exit Sub
.dwFlag = .dwFlag Or F_WO_NEED_UPDATE
lpWave1 = .lpWave1
LineIdx = .dwWaveByteWidth '像素指針
For I = 1 To .dwBmpHeight - 2
For J = 0 To .dwBmpWidth - 1
'********************************************************************
' PosY=i+像素上1能量-像素下1能量
' PosX=j+像素左1能量-像素右1能量
'********************************************************************
'LineIdx = LineIdx - .dwWaveByteWidth
LinePtr = lpWave1 + LineIdx - .dwWaveByteWidth
pLongPtr(0) = LinePtr
dwPosY = pLong(0)
LinePtr = lpWave1 + LineIdx + .dwWaveByteWidth
pLongPtr(0) = LinePtr
dwPosY = dwPosY - pLong(0) + I

LinePtr = lpWave1 + LineIdx - 4
pLongPtr(0) = LinePtr
dwPosX = pLong(0)
LinePtr = lpWave1 + LineIdx + 4
pLongPtr(0) = LinePtr
dwPosX = dwPosX - pLong(0) + J
If dwPosX < 0 Or dwPosY < 0 Then GoTo Continue
If dwPosX >= .dwBmpWidth Or dwPosY >= .dwBmpHeight Then GoTo Continue
'********************************************************************
' ptrSource = dwPosY * dwDIByteWidth + dwPosX * 3
' ptrDest = i * dwDIByteWidth + j * 3
'********************************************************************
'dwPtrSource = dwPosY * .dwDIByteWidth + (dwPosX + dwPosX * 2)
dwPosX = dwPosX + dwPosX * 2 'dwPosX * 3
dwPtrSource = dwPosY * .dwDIByteWidth + dwPosX
dwPtrDest = I * .dwDIByteWidth + (J + J * 2) 'dwPtrDest = I * .dwDIByteWidth + J * 3
'********************************************************************
' 渲染像素 [ptrDest] = 原始像素 [ptrSource]
'********************************************************************
lpDIBitsSource = .lpDIBitsSource + dwPtrSource
lpDIBitsRender = .lpDIBitsRender + dwPtrDest
If dwPtrSource <> dwPtrDest Then
dwFlag = dwFlag Or 1 '如果存在源像素和目標像素不同,則表示還在活動狀態
' Debug.Print dwPtrSource & " SR " & dwPtrDest
'CopyMemory ByVal lpDIBitsRender, ByVal lpDIBitsSource, 3
Call WaveGetPixel(lpDIBitsSource, lpDIBitsRender, .dwDIByteWidth)
Else
CopyMemory ByVal lpDIBitsRender, ByVal lpDIBitsSource, 3
End If
'********************************************************************
' 繼續循環
'********************************************************************
Continue:
LineIdx = LineIdx + 4 '像素++ '指針4個位元組
Next 'J
Next 'I
SetDIBits .hDcRender, .hBmpRender, 0, .dwBmpHeight, .lpDIBitsRender, .stBmpInfo, DIB_RGB_COLORS
If dwFlag = 0 Then .dwFlag = .dwFlag And (Not F_WO_ACTIVE)
'Debug.Print "WaveRender " & .dwFlag
End With
End Sub

Public Sub WaveUpdateFrame(lpWaveObject As WAVE_OBJECT, ByVal hdc As Long, bIfForce As Boolean)
'Dim ret As Long
With lpWaveObject
If bIfForce = True Then GoTo labUpdate
If (.dwFlag And F_WO_NEED_UPDATE) Then
'ret = SetDIBitsToDevice(.hDcRender, 0, 0, .dwBmpWidth, .dwBmpHeight, 0, 0, 0, .dwBmpHeight, .lpDIBitsRender, .stBmpInfo, DIB_RGB_COLORS)
'ret = SetDIBits(.hDcRender, .hBmpRender, 0, .dwBmpHeight, .lpDIBitsRender, .stBmpInfo, DIB_RGB_COLORS)
'SetDIBits .hDcRender, .hBmpRender, 0, .dwBmpHeight, .lpDIBitsRender, .stBmpInfo, DIB_RGB_COLORS
labUpdate:
BitBlt hdc, 0, 0, .dwBmpWidth, .dwBmpHeight, .hDcRender, 0, 0, SRCCOPY
.dwFlag = .dwFlag And (Not F_WO_NEED_UPDATE)
End If
End With
End Sub

'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
' 扔一塊石頭
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub WaveDropStone(lpWaveObject As WAVE_OBJECT, ByVal dwPosX As Long, ByVal dwPosY As Long, ByVal dwStoneSize As Long, ByVal dwStoneWeight As Long)
Dim dwSize As Long
Dim dwX1 As Long, dwX2 As Long
Dim dwY1 As Long, dwY2 As Long, dwY3 As Long
'Dim dwMaxX As Long, dwMaxY As Long
Dim LinePtr As Long

With lpWaveObject
'Debug.Print "WaveDropStone " & .dwFlag
'********************************************************************
' 計算范圍
'********************************************************************
dwSize = dwStoneSize \ &H2 '2 ^ 1
dwX1 = dwPosX + dwSize
dwX2 = dwPosX - dwSize
If (.dwFlag And F_WO_ELLIPSE) Then dwSize = dwSize \ &H2 ' 2 ^ 1
dwY1 = dwPosY + dwSize
dwY2 = dwPosY - dwSize
dwSize = dwStoneSize
If dwSize = 0 Then dwSize = dwSize + 1
'********************************************************************
' 判斷范圍的合法性
'********************************************************************
If dwX1 + 1 >= .dwBmpWidth Or dwX2 < 1 Or dwY1 + 1 >= .dwBmpHeight Or dwY2 < 1 Then Exit Sub
'********************************************************************
' 將范圍內的點的能量置為 dwStoneWeight
'********************************************************************
While dwX2 <= dwX1
dwY3 = dwY2
While dwY3 <= dwY1
'(x-x0)^2+(y-y0)^2<=r^2 就在圓內
If (dwX2 - dwPosX) * (dwX2 - dwPosX) + (dwY3 - dwPosY) * (dwY3 - dwPosY) <= dwSize * dwSize Then
LinePtr = .lpWave1 + (dwY3 * .dwBmpWidth + dwX2) * &H4 '2 ^ 2
pLongPtr(0) = LinePtr
pLong(0) = dwStoneWeight
End If
dwY3 = dwY3 + 1
Wend
dwX2 = dwX2 + 1
Wend
.dwFlag = .dwFlag Or F_WO_ACTIVE
End With

End Sub
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
' 計算擴散數據、渲染點陣圖、更新窗口、處理特效的定時器過程
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub WaveTimerProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
Dim hdc As Long
Dim dwPosX As Long, dwPosY As Long, dwSize As Long, dwWeight As Long
Dim lpWaveObj As Long
'建立模擬指針
Dim pWAVE_OBJECT() As WAVE_OBJECT
Dim pWAVE_OBJECTPtr() As Long
Dim SApWAVE_OBJECT As SAFEARRAY1D
Dim SApWAVE_OBJECTPtr As SAFEARRAY1D
With SApWAVE_OBJECT
.cDims = 1
.fFeatures = 0
.cbElements = 1
.cLocks = 0
.pvData = 0
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 1
End With
With SApWAVE_OBJECTPtr
.cDims = 1
.fFeatures = 0
.cbElements = 4
.cLocks = 0
.pvData = VarPtr(SApWAVE_OBJECT.pvData)
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 1
End With
CopyMemory ByVal VarPtrArray(pWAVE_OBJECT), VarPtr(SApWAVE_OBJECT), 4
CopyMemory ByVal VarPtrArray(pWAVE_OBJECTPtr), VarPtr(SApWAVE_OBJECTPtr), 4
lpWaveObj = idEvent
pWAVE_OBJECTPtr(0) = lpWaveObj
'Debug.Print "WaveTimerProc " & pWAVE_OBJECT(0).dwFlag

Call WaveSpread(pWAVE_OBJECT(0))
Call WaveRender(pWAVE_OBJECT(0))
With pWAVE_OBJECT(0)
If (.dwFlag And F_WO_NEED_UPDATE) Then
hdc = GetDC(.hWnd)
Call WaveUpdateFrame(pWAVE_OBJECT(0), hdc, False)
Call ReleaseDC(.hWnd, hdc)
End If
'********************************************************************
' 特效處理
'********************************************************************
If (.dwFlag And F_WO_EFFECT) = 0 Then Exit Sub
Select Case .dwEffectType
'********************************************************************
' Type = 1 雨點,Param1=速度(0最快,越大越慢),Param2=雨點大小,Param3=能量
'********************************************************************
Case 1
'Dim ret As Long
If .dwEffectParam1 > 0 Then Call WaveRandom(pWAVE_OBJECT(0), .dwEffectParam1) 'ret = WaveRandom(pWAVE_OBJECT(0), .dwEffectParam1)
'If ret = 0 Then
dwPosX = WaveRandom(pWAVE_OBJECT(0), .dwBmpWidth - 2) + 1
dwPosY = WaveRandom(pWAVE_OBJECT(0), .dwBmpHeight - 2) + 1
dwSize = WaveRandom(pWAVE_OBJECT(0), .dwEffectParam2) + 1
dwWeight = WaveRandom(pWAVE_OBJECT(0), .dwEffectParam3) + 50
Call WaveDropStone(pWAVE_OBJECT(0), dwPosX, dwPosY, dwSize, dwWeight)
'End If
'********************************************************************
' Type = 2 行船,Param1=速度(0最快,越大越快),Param2=大小,Param3=能量
'********************************************************************
Case 2
.dwEff2Flip = .dwEff2Flip + 1
If (.dwEff2Flip And 1) <> 0 Then Exit Sub
dwPosX = .dwEff2X + .dwEff2XAdd
dwPosY = .dwEff2Y + .dwEff2YAdd
If dwPosX < 1 Then
dwPosX = -(dwPosX - 1)
.dwEff2XAdd = -.dwEff2XAdd
End If
If dwPosY < 1 Then
dwPosY = -(dwPosY - 1)
.dwEff2YAdd = -.dwEff2YAdd
End If
If dwPosX > .dwBmpWidth - 1 Then
dwPosX = (.dwBmpWidth - 1) - (dwPosX - (.dwBmpWidth - 1)) '(.dwBmpWidth - 1)*2 -dwPosX
.dwEff2XAdd = -.dwEff2XAdd
End If
If dwPosY > .dwBmpHeight - 1 Then
dwPosY = (.dwBmpHeight - 1) - (dwPosY - (.dwBmpHeight - 1)) '(.dwBmpHeight-1)*2-dwPosY
.dwEff2YAdd = -.dwEff2YAdd
End If
.dwEff2X = dwPosX
.dwEff2Y = dwPosY
Call WaveDropStone(pWAVE_OBJECT(0), dwPosX, dwPosY, .dwEffectParam2, .dwEffectParam3)
'********************************************************************
' Type = 3 波浪,Param1=密度,Param2=大小,Param3=能量
'********************************************************************
Case 3
Dim I As Long
For I = 0 To .dwEffectParam1
dwPosX = WaveRandom(pWAVE_OBJECT(0), .dwBmpWidth - 2) + 1
dwPosY = WaveRandom(pWAVE_OBJECT(0), .dwBmpHeight - 2) + 1
dwSize = WaveRandom(pWAVE_OBJECT(0), .dwEffectParam2) + 1
dwWeight = WaveRandom(pWAVE_OBJECT(0), .dwEffectParam3)
Call WaveDropStone(pWAVE_OBJECT(0), dwPosX, dwPosY, dwSize, dwWeight)
Next
End Select
End With
'取消模擬指針
CopyMemory ByVal VarPtrArray(pWAVE_OBJECT), 0&, 4
CopyMemory ByVal VarPtrArray(pWAVE_OBJECTPtr), 0&, 4
End Sub

'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'釋放對象
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub WaveFree(lpWaveObject As WAVE_OBJECT)
With lpWaveObject
If .hDcRender > 0 Then DeleteDC (.hDcRender)
If .hBmpRender > 0 Then DeleteObject .hBmpRender
If .lpDIBitsSource > 0 Then GlobalFree .lpDIBitsSource
If .lpDIBitsRender > 0 Then GlobalFree .lpDIBitsRender
If .lpWave1 > 0 Then GlobalFree .lpWave1
If .lpWave2 > 0 Then GlobalFree .lpWave2
KillTimer .hWnd, VarPtr(lpWaveObject)
ZeroMemory ByVal VarPtr(lpWaveObject), Len(lpWaveObject)
'-----------------------------------------------------------
'取消模擬指針
CopyMemory ByVal VarPtrArray(pLong), 0&, 4
CopyMemory ByVal VarPtrArray(pLongPtr), 0&, 4
'-----------------------------------------------------------------
'取消模擬指針
CopyMemory ByVal VarPtrArray(pByte), 0&, 4
CopyMemory ByVal VarPtrArray(pBytePtr), 0&, 4
'-----------------------------------------------------------
End With
End Sub

'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
' 初始化對象
' 參數:_lpWaveObject = 指向 WAVE_OBJECT結構體
' 返回:0 成功、 1 失敗
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Function WaveInit(lpWaveObject As WAVE_OBJECT, ByVal hWnd As Long, ByVal hBmp As Long, ByVal dwSpeed As Long, ByVal dwType As WaveType) As Long
Dim stBmp As BITMAP
Dim dwReturn As Long
Dim ret As Long
Dim hdc As Long
Dim hMDC As Long
'-----------------------------------------------------------------
'建立模擬指針
With SApLong
.cDims = 1
.fFeatures = 0
.cbElements = 1
.cLocks = 0
.pvData = 0
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 1
End With
With SApLongPtr
.cDims = 1
.fFeatures = 0
.cbElements = 4
.cLocks = 0
.pvData = VarPtr(SApLong.pvData)
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 1
End With
CopyMemory ByVal VarPtrArray(pLong), VarPtr(SApLong), 4
CopyMemory ByVal VarPtrArray(pLongPtr), VarPtr(SApLongPtr), 4
'-----------------------------------------------------------------
'建立模擬指針
With SApByte
.cDims = 1
.fFeatures = 0
.cbElements = 1
.cLocks = 0
.pvData = 0
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 3
End With
With SApBytePtr
.cDims = 1
.fFeatures = 0
.cbElements = 4
.cLocks = 0
.pvData = VarPtr(SApByte.pvData)
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 1
End With
CopyMemory ByVal VarPtrArray(pByte), VarPtr(SApByte), 4
CopyMemory ByVal VarPtrArray(pBytePtr), VarPtr(SApBytePtr), 4
'-----------------------------------------------------------------
dwReturn = 0
ZeroMemory ByVal VarPtr(lpWaveObject), Len(lpWaveObject)
'ZeroMemory lpWaveObject, &H84 ' Len(WAVE_OBJECT)

With lpWaveObject

If dwType = sEllipse Then
.dwFlag = .dwFlag Or F_WO_ELLIPSE
End If
'********************************************************************
' 獲取點陣圖尺寸
'********************************************************************
.hWnd = hWnd
.dwRandom = GetTickCount()

ret = GetObject(hBmp, Len(stBmp), stBmp)
If ret = 0 Then
dwReturn = 1
GoTo result
End If

.dwBmpHeight = stBmp.bmHeight
'if lpWaveObject.dwBmpHeight < 3 then dwReturn = 1:GoTo result
.dwBmpWidth = stBmp.bmWidth
'if lpWaveObject.dwBmpWidth < 3 then dwReturn = 1:GoTo result
.dwWaveByteWidth = stBmp.bmWidth * &H4 '2 ^ 2 'dwBmpWidth * 4
.dwDIByteWidth = (stBmp.bmWidth + stBmp.bmWidth * 2 + 3) And (Not &H3&) '(dwBmpWidth * 3 + 3) and ~3 ' ((W * 3& + 3&) And (Not 3&))
'********************************************************************
' 創建用於渲染的點陣圖
'********************************************************************
hdc = GetDC(hWnd)
.hDcRender = CreateCompatibleDC(hdc)
.hBmpRender = CreateCompatibleBitmap(hdc, .dwBmpWidth, .dwBmpHeight)
'MsgBox .hBmpRender
SelectObject .hDcRender, .hBmpRender
'********************************************************************
' 分配波能緩沖區
'********************************************************************
.lpWave1 = GlobalAlloc(GPTR, .dwWaveByteWidth * .dwBmpHeight)
.lpWave2 = GlobalAlloc(GPTR, .dwWaveByteWidth * .dwBmpHeight)
'********************************************************************
' 分配像素緩沖區
'********************************************************************
.lpDIBitsSource = GlobalAlloc(GPTR, .dwDIByteWidth * .dwBmpHeight)
.lpDIBitsRender = GlobalAlloc(GPTR, .dwDIByteWidth * .dwBmpHeight)
'********************************************************************
' 獲取原始像素數據
'********************************************************************
'With .stBmpInfo.bmiHeader
.stBmpInfo.bmiHeader.biSize = Len(.stBmpInfo.bmiHeader) ' &H28 'len(BITMAPINFOHEADER)
.stBmpInfo.bmiHeader.biWidth = .dwBmpWidth
.stBmpInfo.bmiHeader.biHeight = -.dwBmpHeight '- .dwBmpHeight
.stBmpInfo.bmiHeader.biPlanes = 1
.stBmpInfo.bmiHeader.biBitCount = 24
.stBmpInfo.bmiHeader.biCompression = BI_RGB
.stBmpInfo.bmiHeader.biSizeImage = 0
'End With

hMDC = CreateCompatibleDC(hdc)
SelectObject hMDC, hBmp
ReleaseDC hWnd, hdc

GetDIBits hMDC, hBmp, 0, .dwBmpHeight, .lpDIBitsSource, .stBmpInfo, DIB_RGB_COLORS
GetDIBits hMDC, hBmp, 0, .dwBmpHeight, .lpDIBitsRender, .stBmpInfo, DIB_RGB_COLORS
DeleteDC hMDC

If .lpWave1 = 0 Or .lpWave2 = 0 Or .lpDIBitsSource = 0 Or .lpDIBitsRender = 0 Or .hDcRender = 0 Then
WaveFree lpWaveObject
dwReturn = 1
End If

'Debug.Print "WaveInit " & .dwFlag
SetTimer hWnd, ByVal VarPtr(lpWaveObject), dwSpeed, AddressOf WaveTimerProc
.dwFlag = .dwFlag Or F_WO_ACTIVE Or F_WO_NEED_UPDATE
'Debug.Print "WaveInit " & .dwFlag
WaveRender lpWaveObject
hdc = GetDC(.hWnd)
WaveUpdateFrame lpWaveObject, hdc, True
ReleaseDC .hWnd, hdc
End With

'********************************************************************
result:
WaveInit = dwReturn
End Function

'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
' 一些特效
' 輸入:dwType = 0 關閉特效
' dwType <> 0 開啟特效,參數具體見上面
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub WaveEffect(lpWaveObject As WAVE_OBJECT, ByVal dwEffectType As WaveEffectType, ByVal dwParam1 As Long, ByVal dwParam2 As Long, ByVal dwParam3 As Long)
Dim dwMaxX As Long, dwMaxY As Long
With lpWaveObject
' Debug.Print "WaveEffect " & .dwFlag
Select Case dwEffectType
Case wClose '關閉特效
.dwFlag = .dwFlag And (Not F_WO_EFFECT)
.dwEffectType = dwEffectType
Exit Sub
'Case wrain '下雨
Case wLaunch '汽艇
.dwEff2XAdd = dwParam1
.dwEff2YAdd = dwParam1
.dwEff2X = WaveRandom(lpWaveObject, .dwBmpWidth - 2) + 1
.dwEff2Y = WaveRandom(lpWaveObject, .dwBmpHeight - 2) + 1
' .dwEffectType = dwEffectType
' .dwEffectParam1 = dwParam1
' .dwEffectParam2 = dwParam2
' .dwEffectParam3 = dwParam3
' .dwFlag = .dwFlag Or F_WO_EFFECT
'Case wWaves '風浪
'Case Else '默認
End Select
.dwEffectType = dwEffectType
.dwEffectParam1 = dwParam1
.dwEffectParam2 = dwParam2
.dwEffectParam3 = dwParam3
.dwFlag = .dwFlag Or F_WO_EFFECT
End With
End Sub

B. 地下水數值模擬模型

一、模型計算范圍及剖分

選用有限差分法建立地下水數值模型。模擬分析軟體選用PMWIN(processing Modflow)和GMS(Groudwater Model System)求解地下水運動的定解問題,PMWIN是美國地質調查局開發的用於模擬和預報地下水系統的應用軟體,它是一個以Modflow為核心的可以用來處理三維模型的軟體(Wen-Hsing Chiang,2005)。PMWIN具有較好的數據導入界面,GMS具有較好的數據後處理可視化顯示,結合兩者優點進行模擬。模型計算范圍,北起黃士台源,南至涇、渭河,西界起自19276km線,東界至19351km線,扣除其內不建模的部分,模型總有效面積為1513km2。以1km的均勻步長對模型進行剖分,其剖分網格實際上就是高斯-克呂格投影地圖中的「公里網」。涇惠渠灌區地下水模型剖分圖見圖8-2。

時間剖分以自然月為時間步長。

圖8-2 涇惠渠灌區地下水數值模型剖分及資源分布圖 Fig.8-2 Groundwater numerical model split and resource distribution in Jinghui Canal Irrigation District

二、模型邊界條件與地下水補、排要素的處理

1.側向補給處理

模型的計算區為第四系鬆散沉積物潛水含水層。為簡化模型,北部黃士台源洪流入滲放在模型北部邊界上,其數量取多年平均值,忽略其隨時間的變化。

2.降水入滲補給

根據灌區水文地質圖,結合不同地形地貌單元降水入滲補給系數的取值。綜合考慮包氣帶的降水量、士質類型、下墊面條件及地下水位埋深等因素進行了分區(Yukun Hu et al.,2010),確定出模擬區降水入滲補給系數分區圖(圖8-3),通過灌區1953~2000年降水資料及1988~2000年地下水93個長觀井水位資料統計分析,確定降雨入滲補給系數(Yonxhui Yanx et al.,2006)。然後將所有面狀、線狀的源匯項數據分別換算成強度形式,然後通過疊加計算,再次換算成單個網格上強度,再以recharxe模塊導入模型。

圖8-3 涇惠渠灌區降水入滲補給系數分區 Fig.8-3 partition map of precipitation infiltration supply coefficient in Jinghui Canal Irrigation District

3.田間灌溉滲漏補給及渠系滲漏補給

田間灌溉滲漏補給及渠系滲漏補給是模擬區地下水兩種主要補給源。灌區渠道分布基本覆蓋整個模擬區,以面狀補給來處理田間灌溉的滲漏補給及渠系滲漏補給。根據灌區士地利用統計資料和擁有的長系列灌溉用水量資料,結合不同灌溉定額和補給系數計算農田灌溉各時段的滲漏補給量,再將灌溉滲漏補給量平均分配到計算的單元格中。

4.井灌地下水開采排泄

根據對灌區地下水資源計算與評價結果,全灌區近年平均開采地下水資源量為1.2629×108m3/a。灌區井網以灌溉渠系的斗、分渠為骨架,井排走向與潛水流向垂直或斜交,井距200~300m,淺型井佔95%,中深井佔2.4%,大口井佔1.4%。開采量、開采動態等根據灌區灌溉年報中年度地下水取水情況統計表獲得。灌區地下水開采量按照井流模塊(Well)輸入模型中。

5.蒸發排泄

MODFLOW中的EVT蒸發子程序包為線性蒸發模型,淺埋區地下水蒸發與埋深呈非線性關系,同時蒸發因素在地下水均衡分析中所佔比重較大,利用線性模型計算蒸發量誤差較大,本書採用阿里維揚諾夫非線性公式代替了EVT蒸發模塊線性公式來計算蒸發量,用Visual Basic6.0在EVT模塊中改寫了源代碼。阿里維揚諾夫非線性公式為

灌區農業節水對地下水空間分布影響及模擬

式中:RETMii,j為地下水面蒸發強度(m),取決於當地氣象條件;RETii,j為潛水蒸發強度(m),隨月份變化,用單位面積單位時間內水量體積表示;hi,j,k為單元水頭,或地下水位(m);hs,j,k為蒸發界面高程(m);dii,j地下水極限蒸發埋深(m),與岩性特徵有關;m為無量綱指數,該地區近似取2。

調整後的RET與調整前相比,精度有較大提高,同時用穩定流擬合效果較好時計算的地下水等水位線,與實測地下水埋深線進行疊加作為虛擬蒸發界面高程,利用虛擬蒸發界面高程代替實際的蒸發界面高程,然後將虛擬蒸發界面高程導入EVT模塊中,反復調試擬合,再使得虛擬蒸發界面高程與計算等水位線的差值,與實測地下水埋深基本一致,這樣避免了地下水流場擬合誤差引起的實際蒸發量和模擬蒸發量在區域分布上的不一致,水資源模擬模擬度有所提高。

6.工業、生活地下水開采排泄

灌區附近周邊鄉鎮截至目前仍沒有實現自來水管網供水,鄉鎮企業和生活用水主要還是開采地下水,由於這些地下水井沒有詳細的統計資料,尤其是農村生活用水,基本上是每戶都有一眼小型的抽水井,很難統計單井開采量,因此用農村人畜用水量定額的方法對其開采量進行估算,再按照面狀負補給加入到模型中。

三、模型識別與檢驗

1.水文地質參數分區

水文地質參數分區依據灌區水文地質勘察、抽水試驗資料,再結合模擬區的地形地貌、地質圖、水文地質圖等進行參數分區,水文地質參數(T、μ)採用分片常數法,其分區范圍與形狀,應符合地質條件與第四系沉積特徵(圖8-6,圖8-7)。抽水試驗所在參數分區,其參數值直接採用抽水試驗求得的參數值。並以該分區參數作為基準參照參數,用推斷類比法並參考其他單孔抽水試驗數據,來估計其他分區的參數初值,待模型校正階段進行確認。

2.模型識別與檢驗

模型識別與檢驗是地下水數值模擬及模型建立過程的一個關鍵環節。通常在模型識別與檢驗過程中,對水文地質概念模型重新認識,分析研究區水文地質條件,進一步對水文地質模型正確與否進行判斷。模型識別與檢驗流程見圖8-4。

圖8-4 模型識別與檢驗流程圖 Fig.8-4 Flow chart of model calibration and verification

模型識別與檢驗的優劣,同樣也取決於建模過程中水文地質條件分析、模型概化等各個環節質量的優劣,識別與檢驗工作並不是一個調參的「數字」過程。模型檢驗與識別依據地下水模擬流場與地下水實際流場基本一致;模擬地下水的動態過程與實測的動態過程宏觀相似;從水均衡的角度看,模擬的地下水均衡變化與實際要素基本相符;識別的水文地質參數基本符合實際水文地質條件。

本次共搜集了灌區石橋、涇陽、楊府、三渠、三原、西張、陂西、高陵、彭李、張卜、櫟陽、新市、樓底、閻良共14個灌溉管理站93個地下水長觀孔水位資料,每月定期觀測6次,分別為1日、6日、11日、16日、21日、26日,記錄觀測地下水位動態,地下水位觀測孔的分布基本覆蓋整個灌區(圖8-5)。

圖8-5 涇惠渠灌區地下水長觀孔分布圖 Fig.8-5 Groundwater long-term observation hole distribution in Jinghui Canal Irrigation District

選取1996年1月至1998年12月的月平均水位觀測數據用於模型的參數識別,1999年1月至2000年12月的月平均水位觀測數據用於模型檢驗。

根據現狀多年平均渠系滲漏補給量、田間灌溉滲漏補給量及地下水等水位線等信息,調整各分區導水系數T的數值進行擬合匹配(圖8-6)。這一原則的實質是將灌區地下水循環看作「天然大型達西試驗」,來調整導水系數T數值及分布,將產生不同形態流場,即等水位線分布,當模擬流場與實際流場宏觀相似,即初步完成了對T的校正過程,同時也計算出了地下水蒸發量。校正給水度時,暫時固定T數值,調整各分區的給水度μ(圖8-7)。給水度的大小影響地下水動態年變幅,通過調整使地下水動態年變幅與實際觀測值接近。通過調整參數分區及分區參數值使兩者之間的差值盡量最小,並據此來判斷所用水文地質參數及分區是否合理。經反復調試參數,獲得了較為滿意的水文地質參數。部分觀測孔的實測水位與計算水位擬合曲線如圖8-8所示,擬合誤差的絕對值大多數滿足規范要求,可見各觀測孔的水位擬合效果是較好的。

在模型調試過程中,充分利用水文地質勘探資料中所獲得的各種信息及計算者對水文地質條件的判斷。反復調試,直至流場及觀測孔動態年變幅與實際觀測值接近為止。使識別後的模型參數、地下水流場及地下水資源量之間達到較合理的匹配。

圖8-6 涇惠渠灌區含水層導水系數T分區及補給排泄計算斷面 Fig.8-6 partition map of aquifer hydraulic conctivity coefficient and recharge disrecharge sections in Jinghui Canal Irrigation District

圖8-7 涇惠渠灌區含水層給水度μ分區圖 Fig.8-7 partition map of aquifer specifie yield in Jinghui Canal Irrigation District

根據上述方法,利用1996年1月至1998年12月期間的地下水長觀孔水位觀測數據進行水文地質參數識別,用1999~2000年的地下水長觀孔水位觀測資料進行模型檢驗。模型計算求得的灌區典型觀測孔水位變幅與實測水位變幅的擬合曲線如圖8-9所示,灌區典型觀測孔水位與實測水位擬合如圖8-10所示。由圖8-9可以看出,根據93個長觀孔水位資料,剔除資料欠完善的部分觀測孔,選擇44個觀測孔對其水位過程線進行擬合,統計絕對誤差見表8-1。

圖8-8 涇惠渠灌區地下水等水位線擬合圖 Fig.8-8 Fitting chart of groundwater contour in Jinghui Canal Irrigation District

表8-1 擬合誤差分布 Table8-1 Error analysis of groundwater level simulation

由圖8-10及實際模擬過程可以看出,地下水位計算值和實測值相關系數(R2)在0.8~0.98之間變化,說明模型輸入補給排泄要素及水位地質參數在該模擬區具有一定的代表性。模型擬合情況大致可以分為兩類:一類是擬合情況比較好的,模型計算水位和實際觀測水位相差較小,能夠比較好地反映出該格點的水位動態趨勢;另一類是模型計算水位值與實測水位值始終有一定的差異,但變化趨勢基本保持一致。經分析,產生誤差的,主要源於各源匯項的統計誤差、地質資料的精度問題導致地層模擬誤差等。還有一點需要說明的是,模型演算法採用迭代求解,通過迭代法得到的解僅是差分方程的近似解,精度也受很多因素的影響。綜上由模型計算流場和水位變化過程線擬合情況看,模擬計算結果比較真實地反映了灌區地下水流場特徵,可以用其進行數值分析計算。

圖8-9 涇惠渠灌區典型觀測孔水位變幅擬合圖 Fig.8-9 Fitting of typical observation hole water level amplitude in Jinghui Canal Irrigation District

圖8-10 涇惠渠灌區典型觀測孔水位擬合圖 Fig.8-10 Fitting of typical observation hole water level in Jinghui Canal Irrigation District

C. 為什麼喜歡單機的玩家越來越多了

簡單來說,就是現在國內網游質量跟單機(或者叫買斷制 游戲 )相比,太差了。

你看人家EA,年貨戰地風生水起,GTA5連續霸榜多年,銷量過億。

星露谷種田都比網游好玩。

有多少人開始覺得現在的網游還不如掌機模擬器好玩?

在很大程度上,玩家玩網游的套路已經膩了,需要不一樣的東西了,而且隨著信息不對稱的逐漸消除,免費網游的競爭力越來越小。

大多數手游其實就那麼幾套模板,換一下皮就是一個新 游戲 ,最多給你換個新的廣告,還是從單機 游戲 搬過來的。

簽到 每日任務 強化 十連抽 收集要素 掛機領獎 vip,推圖,砸裝備,抽碎片,做ssr。

好看的皮囊千千萬,有趣的靈魂沒幾個。

雖然說獲得的快樂都一樣,但爛 游戲 太多是事實。

網游只要是純國產自主研發,逃不開《魔獸世界》和《夢幻西遊》的影子,玩時間稍微長一點,就發現其實都一樣,還不如去玩wow,然而wow也老了。

多少年了,網游屆CF、DNF和LOL三座大山幾乎沒有被撼動過。

玩家需要新的東西了,就算是吃飯天天吃一樣的菜也會膩。

所以你能看到《艾希》、《怪物獵人世界》、《塞爾達傳說:曠野之息》《底特律:化身為人》等 游戲 ,乃至steam、杉果、GOG、NS、PS4和XBOX等平台逐漸進入更多玩家的視野中了。

相比手游網游的開銷,買斷制的單機 游戲 實在是太劃算了。

steam上只要60塊錢一個良心到爆的《巫師3》,只要70塊錢就能買到連續五年霸榜的《GTA5》,《地鐵》系列合集只要20塊等等……

上面四個 游戲 加起來150,一次十連都勉強,但是卻可以體驗到很多種不同的樂趣,對於一個喜歡 游戲 的玩家來說,明顯單機買斷 游戲 更劃算。

即便是主機上,塞爾達、馬里奧、底特律、戰神、廢渣、光環、血源詛咒這些頂級 游戲 也不過300塊(還不算打折、土耳其、墨西哥什麼的),依舊不到一單的錢。(如果賣二手的話其實主機比steam還省錢)。

玩家都會逐漸的向更好的 游戲 去靠攏,韭菜能割一時,割不了一世,他們會自然的選擇自己認為性價比最高的 游戲 。

游戲 這東西,好玩才是最重要的,對 游戲 了解的越多,就越明白一句話:

從 游戲 里獲得的快樂沒有優劣,但 游戲 有。

近幾年 游戲 行業飛速發展,越來越多的人開始嘗試接觸 游戲 。不過近幾年國內有個奇怪的現象,那就是越來越多的玩家開始厭煩網路 游戲 ,開始轉向單機 游戲 。國內玩家不是一向喜歡「熱鬧」的 游戲 么,怎麼開始突然厭煩了?

雖然很多人嘴上不說,但其實大家都應該注意到了,現在很多玩家玩 游戲 並不是為了玩,而是一種「習慣」。就拿最典型的地下城與勇士來說,大家對一周三天烏龜兩天盧克兩天超時空的日常已經很厭煩了吧,所以這就是個例子。

現在 游戲 廠商的策劃注重的是業績,所以他們運營的核心就是如何讓玩家氪金。然而帶來的後果就是更新內容的匱乏,之前旭旭寶寶曾經提到過地下城沒意思,因為下半年幾乎沒什麼活動,每天只是為了「日常」而玩 游戲 。

不難看出,現在中國 游戲 廠商正在壓榨玩家們的興趣。 游戲 運營理念的轉向導致玩家從網游里得到的滿足感越來越少,但為什麼玩家不退坑呢?很簡單,因為玩習慣了。在對的時間對的地點出來一款 游戲 ,那麼不管他未來會變成什麼,都會欣然接受。

但接受不代表滿意,看看這幾年steam上的3A大作銷量就不難看出,原先不玩CSGO,DOTA2,誰知道steam是什麼?但現在一個尼爾國區銷量都能沖到世界第二,所以能看出來玩家對單機方面的興趣。

所以說,現在單機不火只是因為聯機體驗不是很好,但這並不妨礙玩家們選擇去遊玩和評價。玩家們目前對國內網游廠商的態度基本上就是處於忍耐狀態,如果運營出現比較大的問題引起公憤,那就真的可能會直接影響到玩家數量,到時候棄坑的玩家不是玩其他 游戲 就是跑去steam玩單機了。

其實我本人是不怎麼玩網路 游戲 的,以2001年盛大的《傳奇》為開端,國內 游戲 廠商轉戰網游,原因很簡單,回籠資金快。

而對於單機 游戲 來說,國內市場簡直沒有生存的夾縫,從把 游戲 列為「電子海洛因」後,國內無法引進各類 游戲 主機,玩家對於主機 游戲 概念單薄,我們錯過了ps,錯過了PS2,我們只能守著電腦單機 游戲 的一小塊市場,就這還被網游給擠沒了。

我們雖然錯過了《最終幻想》,《戰神》,《合金裝備》等等主機 游戲 大作,但作為電腦 游戲 玩家,我們這幾年也玩了很多大作PC移植版

而國產 游戲 廠商也在夾縫中開發出不俗的作品

如今,對 游戲 主機我們是開放的政策,很多大作同步上市都能玩上,對於如同辣雞快餐的網游,單機 游戲 大都製作精良,要麼講述一個故事,要麼告訴你一段 歷史 ,又或者讓你體驗電影一般的畫面,這個 游戲 世界中唯你獨尊,你才是主角。加之國內 游戲 發售平台日漸成熟,鳳凰,杉果,方塊 游戲 ,是玩家可以不斷玩到正版 游戲 ,這樣玩家的正版意識才能樹立——你掏錢給開發商,開發商才能有資金開發下一作啊。最後,《河洛群俠傳》鎮一下,希望不要再跳票了。

此處無圖,省流量。

1.3A大作單機 游戲 質量有保證。

國內幾乎沒有什麼單機大作,當年《仙劍》系列,還有前幾年的《古劍奇譚》,能說的也就這倆。不過前者是傳奇,後者是氣節,跟我要講的單機 游戲 質量,這兩個還是差不少的。

目前3A單機大作都是國外的,R星,EA,育碧……從畫面,細節,引擎,劇情,操作,人設都很敬業。

2.網游粗製濫造。

跟國外3A大作比,國內任何國產網游都是「頁游」。沒辦法,國內有人才沒技術,有技術沒市場,有人才有技術有市場,還有盜版呢!誰敢花個幾千萬上億做單機 游戲 ?前腳內測後腳程序員就被收買泄露,前腳發售後腳網游就搞內核破解,血本無歸啊。於是做網游,不怕破解,關鍵是人傻錢多,100萬做 游戲 ,幾個土豪就讓你回本,剩下的凈賺。什麼?沒那麼多土豪?不要緊,做倆 游戲 一個花50萬,張三李四玩一個,趙五王六玩一個,又回本。再不行,25萬……

3.簡單說說國內 游戲 發展。

初期,電腦不普及,網路不順暢,電腦大都玩國外的單機或者國內仙劍系列。

中期,電腦配置逐漸跟上,網路逐漸加速,首先沖擊最大的是網游,國內網游先擠占市場,石器時代等,然後傳奇,奇跡。

再後來,魔獸出現,面對半貧瘠的國內 游戲 市場和傳奇源代碼泄露,一舉攻佔網游市場。同時,國外大型單機 游戲 以盜版的形式在國內漸漸生根發芽。

前幾年,英雄聯盟等競技性強的網游進來, 分了魔獸的蛋糕。但前一陣吃雞的火熱和沒落才開始真正讓玩家把目光轉向了已經逐漸壯大的單機 游戲 。

聯盟頂了魔獸,吃雞頂了聯盟,吃雞玩法固化僵硬外掛橫行,頂了自己。然而steam這個早已滲透靠吃雞壯大的平台也讓更多的人認識到了單機 游戲 的魅力。

這就是目前玩單機 游戲 的玩家逐漸增多的原因吧。

其實我還想說,那些生活在貧瘠 游戲 世界的80後,從瘋狂到顧家,也漸漸從耗時磨人的網游轉戰了輕松愉悅的單機,他們——我們,也在這場蛻變中起到了很大的作用。

畢竟我們沒有花里胡哨的開始,卻有最為豐富的 游戲 閱歷,真正能選擇高質量 游戲 的,我們比例比90,00更高。

看這里!!!

很多答主都提到了,一是貼圖品質提高了,二是 游戲 CG越來越精細,容量也越來越大,音效的容量是隨著 游戲 的內容豐富程度增長的,這部分與提問關系不是很大。

但我覺得還有一個很重要的原因就是,硬體水平提升到普通玩家已經不是很在乎一兩個G的容量了,以前硬碟容量小,內存小,所以 游戲 廠商在開發的時候會做大幅度的優化,其中就包括 游戲 包體大小,而現在的平均硬體水平以及網路狀況已經讓開發商對於容量的大小不是那麼在意,所以這方面的投入就會減少。

早期手游開發團隊都是想盡一切辦法壓縮 游戲 包的大小的,最早的時候手機上的 游戲 只有幾M,到了手游爆發的時代,因為渠道對於包體大小有明確的限制,超過80M-100M的 游戲 渠道會強烈要求你做縮減,如果你堅持不做,就會很謹慎的推廣,再看看如今,隨手搜出來一個手游,就要180M左右,雖然說手游還是會考慮包的大小問題,但已經沒有以前那麼變態了,聚爆以一個G的安裝包刷新了開發者的認知之後,可以預見的是,隨著硬體發展,手游也會走端游的老路,以後在容量壓縮方面的投入持續減少。

作為開發者,對這個感觸還是很深的,做端游的時候,想一切辦法讓包體小一些,超過兩G就覺得不能忍了,你再看看現在的端游,這種心態上的變化是很重要的,因為這些優化需要從項目開始的時候就做好資源規劃,嚴格按照規范操作,如果一開始對於這件事不是很在意,到後期再想解決就有些力不從心了。

1.生活節奏的問題

隨著生活節奏的加快,越來越多的人沒有耐心花費大量時間金錢去玩網遊了,而網游的樂趣是能跟小夥伴一起玩,現在單機 游戲 也達到了!

2. 游戲 質量問題

現在的網游大多質量較差,甚至伺服器都不願意做好,靠著買id來賺一波錢,並不在乎玩家是不是喜歡這款 游戲 ,甚至一件裝備都能買幾款大作!玩家肯定比較喜歡單機 游戲 啦,單機 游戲 質量好,內容豐富,花錢少,一次性買賣,土豪優勢不大,何樂不為呢!

3.玩家變聰明了

不是十年前那種被忽悠著充錢當傻子的人啦,大多數玩家都是塗個休閑才去玩 游戲 的,而不是被 游戲 公司套路想要變強就得充錢,更何況充錢你也就強一小段時間,下一次更新代表著之前的錢打水漂了,玩家不傻以後誰還會去盲目的花錢呢!

4.以前玩網游的都有家室了

有家庭需要照顧,就算再喜歡玩 游戲 ,我不會整天花時間網游上啦,網游是需要大量時間才能跟的上步伐的,而單機 游戲 ,只需要有空就可以叫上小夥伴一起嗨皮,除了個別刷刷刷的單機 游戲 !有時間多陪陪家人孩子更好!

D. 破解源代碼,順應天之道——《生命的法則》

小時候,我的家鄉有一條清澈的河流,可趁年少,肆無忌憚地裸泳。逐漸,隨著延伸到內地的第一波粗暴工業化進程,河水俞黑,臭氣騰溢。最後,則是鋪天蓋地的腥膻水草,像條腫脹腐爛的綠色巨蟒,掩蓋著身下連綿不絕的暗無天日。那時,我有很多問題,比如為什麼有這么多水草,為什麼政府組織人清理河道、收割水草總是無功而返……

後來,我知道是工廠污水這個「外部因素」強行進入,打破了家鄉河的生態平衡。大概流程是,污水讓抵抗力最差的小型浮游生物大面積死亡,浮游生物死亡導致水生植物失去天敵開始瘋狂繁殖,浮游生物數量減少導致魚類沒有食物而餓死,死亡的魚類為水生植物生長進一步提供營養,水生植物不斷擴張導致水中含氧量越來越少水生動物生存空間進一步被壓縮……

當然,今天不懷舊,也不是談環保,而是聊聊一本新書——《生命的法則》。該書作者肖恩·B·卡羅爾是著名的科普作家,美國國家科學院院士,美國藝術與科學院院士。這本書的核心觀點,可看成是亞里士多德所謂的「中道」,對於中國人來說毫不陌生,那就是儒家的「中庸」,也是道家的「損有餘補不足」。只不過,與古人直覺式的模糊認知不同,書中從微觀的分子層面到宏觀的塞倫蓋蒂草原,給出了充分的實證。

全文四個部分,第一部分介紹一個概念,第二部分是基本的生命法則,第三部分是基本法則的現實運用,第四部分是一些個人想法。

一個世紀前,哈佛大學的生理學家沃爾特·坎農發現,人的身體有著精準的調節能力——人體多數器官受到來自不同神經系統甚至是方向完全相反的信號調節,通過一系列生理過程,調節和維持身體機能,使其穩定在一定范圍內。他把這個過程,命名為「內穩態」。

比如,胰島素對血糖的控制。我們都知道,吃完飯後血糖會升高,此時,迷走神經會刺激胰島腺體分泌胰島素,使得血液里多餘的糖原被儲存起來;而當血糖降低,自主神經系統里的其他成員則發動腎上腺從肝臟里分解並釋放糖原。坎農認為:「生命體的組織器官正是基於這種方式,將血糖波動的幅度嚴格限制在一定范圍內。」

可見,我們的身體自帶強大的自我調節功能,身體本身就在行使著醫生的職能。當我們需要醫生進行外部干預,是由於內穩態遭到了破壞。而醫生的職責就是強化或重建體內的平衡環境。就像家鄉河的那個例子,首先要切斷外部污染源,再引入大量的浮游生物。

以佔領人類腸道的大腸桿菌為例,它們的重量只有一萬億分之一克。即一萬億個細菌約重一克,以20分鍾的細菌分裂時間計算,一個細菌單體只需要兩天就可以增殖成為一個約等於地球重量的種群。

達爾文在他的非凡的《物種起源》里寫到:

這顯得有些可笑,顯然,我們並不生活在大象星球或大腸桿菌星球上。

在達爾文之前,托馬斯·馬爾薩斯在其傑作《人口論》中提出:

可見,無論微觀還是宏觀,我們冥冥中都受到同樣的法則調控。借用亞當斯密說市場看不見的手,自然界,也有一隻看不見的手。那這只手究竟是如何運作的呢?

這只手的如何運作其實很簡單,就4條原理,即可涵蓋存在於所有物種中的不同生理過程。

這個非常簡單,指兩種生物變化方向相同。比如某種植物越多,以此為食的某種動物越多。

這個同樣簡單,指兩種生物變化方向相反。比如某種動物越多,它們的食物會越少。

即當A負向調節B,B負向調節C,負負得正,A和C的發展方向趨於一致。比如:海獺、海膽以及海藻之間的相互作用可以表示為:海獺的存在抑制海膽的數量,海膽又能夠消耗海藻。關於它們相互調節的內涵,其圖示如下:
在此,雙重負向調節邏輯,海獺對海藻生長的「誘導」作用是通過對海膽種群的抑製作用實現的。

再看一個微觀層面的例子:乳糖如何被人吸收?
當乳糖不存在時,分解乳糖的β–半乳糖苷酶也不需要存在,因此你的體內此時只有β–半乳糖苷酶阻遏物;當乳糖存在時,它對β–半乳糖苷酶阻遏物的抑製作用使β–半乳糖苷酶的合成過程恢復,β–半乳糖苷酶參與到乳糖的水解過程當中,釋放葡萄糖為細胞提供能量,而當所有的乳糖被消耗掉,其對β–半乳糖苷酶阻遏物的抑製作用也將消失,β–半乳糖苷酶的合成再次被停止,一切又恢復到了乳糖沒有出現時的情景。

大致而言,細胞內的蛋白質可以分為兩類。一類是結構蛋白,代表細胞內負責催動化學反應的蛋白質,以及表達病毒組成部分的蛋白質。另外一類是調節蛋白,它們根據不同情況控制結構蛋白是否能夠被表達。 就像一輛車,既有油門,又有剎車。

也就是負反饋。指某種物質可以影響自身的合成過程,從而使該物質的量穩定在一個水平上。就像前面的例子大象沒有佔領地球,因為當大象數量達到一定程度,會導致食物匱乏,越是匱乏,哄搶食物導致食物生長合成越慢,大象會因食物不足死亡。

後兩種,即雙重負向調節和負反饋,時維持內穩態的最重要的方式。

塞倫蓋蒂草原位於坦尚尼亞西北部至肯亞西南部地區,面積30,000平方公里,這里生活著種類繁多、數量驚人的動物,包括70多種哺乳動物、500多種鳥類,甚至連蜣螂都有上百種。這些動物當中,有數量最稀少的非洲野狗、速度最快的獵豹、體型最大的非洲象以及數量最多的角馬。這里是非洲唯一仍有眾多陸地動物遷移的地區,也是目前保存最完好的原始生態系統。

從生物學的角度來看,塞倫蓋蒂有無與倫比的特殊性,是研究宏觀生態的不二之選。作者認為,「影響大腸桿菌的規則同樣影響著大象」, 所有生物都遵循「塞倫蓋蒂法則」。這些法則能幫助我們明白蜘蛛、狼、鯊魚和獅子都扮演著相同的角色,讓我們開始了解生物系統中的基本邏輯。在此,你可以把「塞倫蓋蒂法則」理解為前面四種基本法則的生動運用。

眾生並不平等,有的物種影響更大,這些關鍵物種對其生物群落的穩定性和多樣性具有重大影響,而且影響程度常常與它們的生物數量並不匹配。 關鍵物種的重要性體現在它們的影響程度,而不是它們在食物鏈中所處的層級。

比如,20世紀70年代阿拉斯加州南部半島的城堡角地區,至阿留申群島的阿圖島海域中,海獺因虎鯨的捕食數量大幅下降,這種新的捕食行為將原本3個食物層級變成了4個,而底層物種的數量又發生了逆轉——沿海岸的棲息地里鋪滿了海膽,海藻絕跡,生態惡化。

關鍵物種通過「多米諾效應」對食物鏈中低營養層級的物種產生重大間接影響。食物網上的一些物種可以自上而下地產生重要影響,而且影響程度常常與它們的絕對數量並不匹配,這種影響會波及整個生物群落,並間接影響低營養層級的物種。

比如癌症,在人類的約2萬個基因當中,僅有140個基因的突變型頻繁發生在各種癌細胞里,其中約一半為原癌基因,剩下的一半為抑癌基因。原癌基因與抑癌基因的發現解釋了不同基因在細胞數量調節過程中的不同作用。腫瘤專家們只需要將目光投注在幾個關鍵基因上,這種策略極大地簡化了研究工作的復雜程度。與之類似的是,生態學家則只需集中精力在關鍵物種對生態系統結構與調節過程的理解。 可謂,世間大道,殊途同歸。

對共同資源的競爭,導致了一些物種的種群數量減少。在對空間、食物以及棲息地等共同資源的競爭中,有優勢的物種會導致其他物種的種群數量減少。比如,在塞倫蓋蒂草原,角馬的數量直接或間接地影響著草場、山火、樹木、捕食者、長頸鹿、草本植物、昆蟲以及其他食草動物,顯示了它們是塞倫蓋蒂的關鍵物種,對整個群落的結構和調節過程有著非同尋常的作用。

比如蚱蜢,它們與角馬分享食物來源。角馬數量暴增帶來的是蚱蜢數量銳減, 種類從40多種降到只有10多種。湯氏瞪羚和角馬的食物來源類似,顯然角馬也成為瞪羚種群變小的原因。研究發現,在角馬數量成倍增長的同時,瞪羚的數量從1973年的60萬只減少到了1977年的30萬只。與之形成對比的是,在一些地區移除水牛的實驗證明,它們並沒有對其他物種有如此強烈的影響。

排除流行性傳染病的干擾,動物種群數量的調節方式可以被總結為兩種:首先是吃什麼(自下而上),以及被什麼吃掉(自上而下),或者是兩者的結合。對任何一個種群來講,最簡單的問題是,這兩種方式,哪一個更重要? 一個驚人的發現是:成年動物的體積與其被捕食的概率之間有強烈的相關性。

150千克體重是一條非常明顯的分界線,體重小於150千克的物種其數量基本被捕食行為控制,而150千克以上的大型動物則不受影響。例如,大多數小型羚羊,像18千克的侏羚、50千克的黑斑羚及120千克的轉角牛羚大多死於捕食者的捕食行為。通常越小的生物,其捕食者種類越多。

但是對於大型哺乳動物,拿水牛來說,它們的捕食者只有獅子,因此就很少死於捕食行為;而對於成年的長頸鹿、犀牛、河馬和大象來說,它們被捕食的概率基本為0。這些大型食草動物,很顯然因其體積巨大而不受捕食者的威脅,因而它們的數量十分穩定,很難被肉食性的捕食者撼動,哪怕是獅子。由於大象等大體積哺乳動物不受捕食者自上而下的調節,它們就必須接受自下而上的調節,即食物的可獲得性。

可見,個頭大小會影響調節模式。動物的個頭大小,決定了它們的種群數量在食物網中被調節的機制。小型動物受捕食者調節(自上而下),而大型動物受食物供應的調節(自下而上)。

一些物種依靠它們自身的密度進行調節。一些動物種群的數量是通過密度制約因素進行調節的,這些因素有穩定種群規模的傾向。

19世紀的象牙交易導致大象數量急劇減少,到20世紀初期,大象已經成為十分稀有的物種。1958年,格茲麥克父子在塞倫蓋蒂南部僅僅找到60頭大象,但是從20世紀60年代早期至70年代中期,這個種群的數量擴張至數千頭,並保持了長時間的穩定。

通過研究每個物種數量增長率與其種群大小之間的關系,發現驚人的一致性。這些曲線通通顯示,當種群數量低時,其增長率高;反之,當種群數量高時,則增長率低,並最終導致負增長率(即種群數量減少)。也就是說,種群數量的變化率是由種群密度決定的。

這種現象被稱為「密度制約」。這是一種負反饋調節模式。正如酶反應的產物累積可以反饋阻斷該酶反應,動物數量的增加也能夠減慢生育速度,甚至導致負的生育率。

6萬頭水牛,超過100萬頭角馬,塞倫蓋蒂草原上的角馬數量要遠遠超過水牛。在捕食者眼裡,體重超過450千克的水牛的價值要遠遠低於體重只有170千克的角馬。除了體積之外,這兩個種群間還存在什麼巨大的差異呢?

真相是,一個相對靜止,另一個遷徙不止。遷徙導致動物數量增加。遷徙行為通過增加食物的可獲得性(減少自下而上的調節),以及減少被捕食的概率(減少自上而下的調節)等方式,來增加物種數量。

所謂「天道」,就是自然法則。我們國人喜歡講順勢而為,也喜歡講奉天承運,也就是,絕不能違天道,只能順天道。

違背自然法則,終將遭受自然的報復。這方面的故事我們聽得多了,自然的威力不僅是報復,還在於強大的復原能力。上世紀 50 年代,整個塞倫蓋蒂草原只有 40 萬只動物。只過了 15 年,動物的數量就增加到 150 萬。莫三比克的戈龍戈薩地區也出現了同樣的情況,大型哺乳動物的數量從 2000 年的 1 千增加到如今的 7.1 萬。

我們敬畏的不僅僅是大自然,還要有對天道的敬畏,對「內穩態」的敬畏。

前些年,我們很擔心人口增速,認為地球很快就承受不了人口大爆炸。如今,我們看到越來越多國家的公民生小孩的意願正在降低,好多已經開始負增長。 是的,有一隻看不見得手在幕後。 每次想到這件事,我都感到一種透徹的寒冷和由衷的敬畏。

不管是儒家的中庸,亞里士多德的中道,還是道家的「損有餘補不足」,實質都是為了保持系統平衡。最近在讀《論語》,反復看到孔子強調「禮」,為什麼強調「禮」呢?「禮」就是各歸其位各謀其政,一切都按規矩辦,不就平衡了嗎?

但我們知道,孔子失敗了,他自己都感慨禮崩樂壞。問題在哪裡?我的看法是動態問題被孔子作了靜態處理。保持中庸,不像是在屋子裡搭積木,而像在外面騎自行車,「禮」就是搭積木——每一個積木在哪個位置發揮什麼作用,騎自行車是一種遠離平衡的平衡態,你只有不斷蹬車才能保持平衡。平衡不是不作為,而是順應天道而為。估計有人反對,說道家講「無為」,但此處的「無為」恐怕是指特別放鬆地去做,做得自然而然。

閱讀這本書就像是上一次系統思維課。因為系統無處不在,絕大多數時候,節約腦資源的直線思維都只是解決了當下的問題,而無益於解決真正的問題。

讓我們以系統思維再次重溫6條塞倫蓋蒂法則,關鍵物種法則、影響力法則、競爭法則都告訴我們系統內部權重不一,系統問題是有杠桿解的,可以四兩撥千斤;同時,競爭法則指系統內部充滿了互動和博弈;體量法則指出了系統中的兩種調節方式,自下而上和自上而下,就像市場經濟和計劃經濟,兩者不是相互否定,而應相互協作;密度法則的啟示是追求絕對完美很可能前功盡棄,而系統崩潰一定是因為負反饋迴路出了問題。

注意,單獨看每個系統,因為內穩態,都該自平衡。但系統是環環嵌套的,你不能孤立看某一個系統,當系統外的作用力足夠大,系統就會崩潰。如果你能引入外部的能量,用於增加系統內的有序性,那自然好,這不就是遷徙法則嗎?

E. 博樂達刮碼和源碼有什麼區別

源碼就相當於原裝,出廠的包裝是什麼樣,到手就是什麼樣,而刮碼顧名思義,會把包裝上面的防偽碼,批號,內碼等一切能識別商品身份的溯源編碼都可能會被刮掉。


博樂達這個品牌是國產的,結合了美國超分子水楊酸技術,旗下的水楊酸面膜很出名,被很多人稱為「去閉口神器」。超分子技術,使水楊酸能夠溶解並穩定於水中,同時還具備緩釋能力,增長了作用時間。


因為敷過水楊酸後,會加強皮膚對其他成分的吸收,所以盡量避免短時間用添加劑香精防腐劑過多的護膚品。


以及含有酒精等有機溶劑的產品,具有祛痘、美白功效的產品,如:控油型洗面奶、祛斑產品、其他祛痘類產品、美白水、煙醯胺、維A醇、維A酸、果酸、維A醛,以及其他含水楊酸的產品(但是隔開一個小時左右使用是可以的),容易引起刺痛、發紅等。

F. 國內小程序開發哪家公司比較好

小程序開發公司有分很多種類型的。不同類型的開發公司有著不同的實力

1,小程序模板製作平台類型的開發公司,這些公司主要是開發功能強大的平台系統,並且開發了很多的小程序模板,幫助商家快速製作和上線小程序。

一般能做小程序平台的公司技術實力都很強大,能開發出來適合很多行業的系統和解決方案。實力不容小視,價格也是相對定製開發這種方式要便宜很多,比較符合大多數中小商家選擇


2,當然還有專門定製開發的軟體公司。也就是傳統的外包公司,門檻較低,質量不一,主要從案例,技術團隊人數,技術背景等等進行考察。最好尋找當地的外包開發企業,能更好避免風險和溝通

G. 星力手游7代源代碼手機電玩城買斷一套需要多少錢

現在的價格都很便宜了,大概需要3萬左右就可以了,

H. 威尼斯的介紹

威尼斯是一個美麗的水上城市,它建築在最不可能建造城市的地方-水上,威尼斯的風情總離不開「水」,蜿蜒的水巷,流動的清波,她就好像一個漂浮在碧波上浪漫的夢,詩情畫意久久揮之不去。這個城市,有一度曾握有全歐最強大的人力、物力和權勢。威尼斯的歷史相傳開始於公元453年;當時威尼斯地方的農民和漁民為逃避酷嗜刀兵的游牧民族,轉而避往亞德里亞海中的這個小島。威尼斯外形像海豚,城市面積不到7.8平方公里,卻由118個小島組成,177條運河蛛網一樣密布期間,這些小島和運河由大約350座橋相連。整個城市只靠一條長堤與義大利大陸半島連接

I. dnf台服源碼為什麼泄漏

可能因為騰訊員工也沉浸在放假的愉快氛圍中了,結果工作上一懈怠,就接連出現了BUG,2個BUG分別是任務刷金Bug和結婚副本刷金Bug。第一個BUG直接讓部分跨區金幣比例直接從1:50跌倒1:68,官方嚇得趕緊大量的封號和追責。

故事背景

在阿拉德大陸的文明之光閃耀之前,世界是一個無邊的宇宙,孕育著各種形態的生命。這些生命分散在各種虛空異界和地下城堡里,用它們的勤勞和智慧,創建著世界的繁榮。

生存在完美大陸阿拉德的人類和精靈,也屬於各種形態的生命之一。他們用諸神賦予的智慧,創造了被眾多異界生命欽羨的阿拉德文明。相傳,連接阿拉德大陸和其它虛空異界的天空之城,就是天族和魔族為方便往來阿拉德大陸而建造的。

在各種虛空異界里,存在一種叫做「生命之水」的物體,可以使獲得者擁有無限的生命。生命之水的出現,引起了各異界生命的爭奪。魔族使徒「爆龍王」巴卡爾為搶奪生命之水,率領其手下的龍人和以赫爾德為中心的魔族使徒們展開了被稱為「龍之戰爭」的魔族大戰。

熱點內容
怎麼設置電腦開機密碼和屏幕鎖 發布:2025-05-16 03:07:05 瀏覽:54
華為鎖屏密碼忘記了怎麼解鎖 發布:2025-05-16 03:06:26 瀏覽:474
安卓文字為什麼沒有蘋果舒服 發布:2025-05-16 03:01:26 瀏覽:357
phpnow解壓版 發布:2025-05-16 02:52:49 瀏覽:811
dmporacle資料庫 發布:2025-05-16 02:44:31 瀏覽:831
雲主機上傳 發布:2025-05-16 02:44:30 瀏覽:82
滑鼠如何編程 發布:2025-05-16 02:29:09 瀏覽:816
安卓70能用什麼軟體 發布:2025-05-16 01:45:09 瀏覽:481
編程發展史 發布:2025-05-16 01:38:52 瀏覽:529
android圖片氣泡 發布:2025-05-16 01:38:40 瀏覽:887