当前位置:首页 » 操作系统 » 水起市源码

水起市源码

发布时间: 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 00:54:34 浏览:512
android语音控制 发布:2025-05-16 00:53:50 浏览:264
win8windows无法访问 发布:2025-05-16 00:37:53 浏览:894
八种排序算法 发布:2025-05-16 00:37:17 浏览:55
左旋螺纹数控编程实例 发布:2025-05-16 00:11:49 浏览:10
安卓游戏旧版本从哪个软件下载 发布:2025-05-16 00:00:20 浏览:329
连接聚类算法 发布:2025-05-15 23:55:09 浏览:978
工资算法单休 发布:2025-05-15 23:52:30 浏览:819
超凡先锋配置不行怎么办 发布:2025-05-15 23:27:54 浏览:532
win7取消加密 发布:2025-05-15 23:26:37 浏览:472