久久天天躁狠狠躁夜夜躁,国产精品入口福利,97久久精品人人爽人人爽蜜臀 ,中文字幕国产精品一区二区

   

當前位置首頁 > 信息公告

【Mind+Python】凸透鏡成像動態規律

更新時間:2023-10-20 文章作者:佚名 信息來源:網絡整理 閱讀次數:44次

背景:1N3物理好資源網(原物理ok網)

人教版高中八年級《物理》上冊書的重難點章節是第五章《透鏡及其應用》。本章特征之一是概念多,如:透鏡、凸透鏡、凹透鏡;光心、主光軸(主軸)、焦點、焦距(1、2倍焦距);光的會聚與發散,虛像與實像等等。教學與學習難點有光學畫圖,凸透鏡成像動態規律等,大多數中學生無法解決實際問題。1N3物理好資源網(原物理ok網)

其中的核心內容(重難點)是第三節《凸透鏡成像的規律》。捉住了規律,非常是動態規律(作光路圖),就容易突破這個難點,能夠容易理解照像機、投影儀(幻燈機)、放大鏡,以及旁邊的斜視墨鏡、顯微鏡、天文望遠鏡、潛望鏡等。1N3物理好資源網(原物理ok網)

我們先來看幾張PPT:1N3物理好資源網(原物理ok網)

動態規律:1N3物理好資源網(原物理ok網)

從以上PPT我們看出,只有把握了凸透鏡成像的規律,能夠理解透鏡成像的虛、實;正、倒;大、小;班主任可以通過演示實驗,在講臺上或則PPT上動漫展示,中學生們記憶規律口訣等。并且課后朋友們依然無法產生內化的知識規律凸透鏡成像規律的光路作圖,也不可能在實驗室里反復折騰。非常是對于物體與透鏡的距離改變時發生的動態規律更難掌握。為此,在2020年12月份,版程序——“凸透鏡的動態規律”首次試驗基本實現動態規律。課后凸透鏡成像規律的光路作圖,朋友們可以在電子白板上自由操作了。1N3物理好資源網(原物理ok網)

這兒的代碼在V1.7.1RC1.0Mind+中平添了一些療效功能,于8/24/2021完成。1N3物理好資源網(原物理ok網)

程序功能:1N3物理好資源網(原物理ok網)

1、固定元素:在屏幕大窗口中展示凸透鏡示意圖(含主光軸、光心、焦點、2倍焦點等);1N3物理好資源網(原物理ok網)

2、繪制動態元素:鍵盤或觸摸設備隨機點擊凸透鏡右邊任意位置(點擊次數暫設置為20),立刻在此位置畫出代表物體的箭頭形狀、發出兩條特殊光線(平行于主光軸和穿過光心)、相應的兩條折射光線及物體所成的虛像(或實像-帶反射延長線),右上出現相應提示標簽等。為了前后對比,不會擦除已畫動態元素。1N3物理好資源網(原物理ok網)

編制過程:1N3物理好資源網(原物理ok網)

步驟1布局窗口大小座標系、畫出固定元素1N3物理好資源網(原物理ok網)

如:借助.py庫文件功能,勾畫凸透鏡示意圖(含主光軸、光心、焦點、2倍焦點、提示標簽)1N3物理好資源網(原物理ok網)

步驟2動態元素1N3物理好資源網(原物理ok網)

動態元素--物體、實像、虛像、光線都同時隨滑鼠的點擊而平添畫出。1N3物理好資源網(原物理ok網)

物體:(不改變大小)只在主光軸兩側上方水平位置;位置由鍵盤點擊時的X軸位置決定。1N3物理好資源網(原物理ok網)

虛像:只在主光軸兩側下方位置變化(改變大?。?;關鍵頂點位置由過光心直線與過右焦點直線的兩直線多項式相交之解得到。1N3物理好資源網(原物理ok網)

實像:只在主光軸兩側上方位置變化(改變大?。煌?。1N3物理好資源網(原物理ok網)

光線:僅穿過光心的變化。確定光線由物體箭頭頂點與座標原點決定。1N3物理好資源網(原物理ok網)

以下81、82是核心代碼。1N3物理好資源網(原物理ok網)

步驟3程序結構1N3物理好資源網(原物理ok網)

凸透鏡成像規律的光路作圖_凸透鏡成像規律作圖法_凸透鏡成像規律模型1N3物理好資源網(原物理ok網)

主程序main()1N3物理好資源網(原物理ok網)

主要完成固定元素勾畫及最后調用下邊兩個子程序。1N3物理好資源網(原物理ok網)

子程序1:()1N3物理好資源網(原物理ok網)

勾畫動態對象。1N3物理好資源網(原物理ok網)

子程序2:()1N3物理好資源網(原物理ok網)

勾畫動態對象變化時的提示標簽及顯示療效。(這三天的附加功能)1N3物理好資源網(原物理ok網)

以下代碼附加詳盡注釋1N3物理好資源網(原物理ok網)

代碼1N3物理好資源網(原物理ok網)

# 動態規律
# 12/2020 ini
# 08/23-24/2021 ok
from graphics import *  # 導入庫文件
from random import * 
global noteText_loc
noteText_loc = 0
win = GraphWin("凸透鏡成像動態規律",1280,600) # 設置窗口及標題
win.setCoords(-700,-563,1100,281) # 設置相對坐標系
noteText = Text(Point(600,100),'成像規律提示') # 提示標簽
noteText.setTextColor('green')
noteText.setStyle("bold")
noteText.setSize(22)
noteText.draw(win)
################ 定義主函數
def main(): 
    mainAxis = Rectangle(Point(-690,3),Point(1090,-3))
    mainAxis.setWidth(1)
    mainAxis.setFill("blue")
    mainAxis.draw(win)
    Text(Point(1000,20),'主光軸').draw(win) # 凸透鏡主光軸標簽
    
    #畫凸透鏡示意圖
    triangleUp = Polygon(Point(-20,220),Point(20,220),Point(0,250))
    triangleUp.setFill("cyan")
    triangleUp.draw(win)
    triangleDown = Polygon(Point(-20,-220),Point(20,-220),Point(0,-250))
    triangleDown.setFill("cyan")    
    triangleDown.draw(win)
        
    lens = Rectangle(Point(-5,-222),Point(5,220))
    lens.setWidth(0)
    lens.setFill("CYAN")
    lens.draw(win)
    Text(Point(0,-270),'凸透鏡').draw(win) # 凸透鏡標簽
    
    fdotC = Circle(Point(0,0),8) # 畫光心
    fdotC.setWidth(1)
    fdotC.setFill("yellow")
    fdotC.draw(win)
    Text(Point(0,-30),'光心').draw(win) # 光心標簽
    
    fdotL = Circle(Point(-150,0),10) # 畫左焦點
    fdotL.setFill("yellow")
    Text(Point(-150,-30),'F').draw(win) # 一倍焦距左標簽
    fdotL.draw(win)
    fdotR = Circle(Point(150,0),10) # 畫右焦點
    fdotR.setFill("yellow")
    Text(Point(150,30),'F').draw(win) # 一倍焦距右標簽
    fdotR.draw(win)
    fdotL2 = Circle(Point(-300,0),10) # 畫左兩倍焦距點
    fdotL2.setFill("yellow")
    Text(Point(-300,-30),'2F').draw(win) # 二倍焦距左標簽
    fdotL2.draw(win)
    fdotR2 = Circle(Point(300,0),10) # 畫右兩倍焦距點
    fdotR2.setFill("yellow")
    Text(Point(300,30),'2F').draw(win) # 二倍焦距右標簽
    fdotR2.draw(win)
    for i in range(20): # 設置成像畫圖次數
        myobj_ray() #調用成像子函數
        display_noteText() #調用提示標簽子函數
################### 定義繪制光線子函數
# 注:待成像的實物必須位于凸透鏡的左邊,所以鼠標點擊右邊無效
def myobj_ray(): 
    global noteText_loc
    objX = win.getMouse().getX()
    while objX > 0: # 只捕捉鼠標點擊凸透鏡左邊
        objX = win.getMouse().getX()
        
        
    if -310 < objX < -290: # 鼠標點擊在 2F 附近則直接“吸附”為 2F 點
        objX = -300
    if -160 < objX < -140: # 鼠標點擊在 F 附近則直接“吸附”為 F 點
        objX = -149
    
    px = 135/(135/objX+0.9) # (px,py)是兩個直線方程的交點
    py = px*135/objX        # y = 135  - 0.9x;y = kx(k = 135/objX)
            
    obj = Polygon(Point(objX-7,0),Point(objX+7,0),Point(objX+7,110),
                  Point(objX+15,110),Point(objX,135),
                  Point(objX-15,110),Point(objX-7,110)) # 畫實物(固定大小的棕色箭頭)
    obj.setFill("brown")
    scaleV = py/135
    phoVR = Polygon(Point(px-7*scaleV,0),Point(px+7*scaleV,0),
                   Point(px+7*scaleV,110*scaleV),Point(px+15*scaleV,110*scaleV),
                   Point(px,py),Point(px-15*scaleV,110*scaleV),
                   Point(px-7*scaleV,110*scaleV)) # 畫像
    if  -150 < objX < 0:
        phoVR.setFill("yellow")
        phoVR.setOutline("yellow") # 如果是放大鏡原理成的虛像用黃色
    else:
        phoVR.setFill("orange") # 否則成實像用橙色
    
    rayh = Line(Point(objX,135),Point(0,135))
    rayh.setWidth(3)
    rayh.setArrow("last")
    rayh.setFill("red") # 畫來自實物平行主光軸的帶方向的光線
    
    rayf = Line(Point(0,135),Point(150,0))
    rayf.setWidth(3)
    rayf.setArrow("last")
    rayf.setFill("red") # 畫Y軸到X軸的固定光線
    rayp = Line(Point(150,0),Point(750,-540))
    rayp.setWidth(3)
    rayp.setArrow("last")
    rayp.setFill("red") # 接上固定光線畫X軸到無線遠的固定光線
    rayc = Line(Point(objX,135),Point(0,0))
    rayc.setWidth(3)
    rayc.setArrow("last")
    rayc.setFill("red") # 畫來自實物且穿過光心的帶方向的光線
    if -150 < objX < 0: # 虛像(放大鏡原理)
        raycc = Line(Point(objX,135),Point(px,py))# 過光心光線反向延長線
        raycc.setWidth(3)
        raycc.setArrow("none")
        raycc.setFill("yellow") # 成虛像的反向延長線用黃色
        raycc.draw(win)
        
        raycc = Line(Point(0,0),Point(-px,-py)) # 過光心后的折射光線
        raycc.setWidth(3)
        raycc.setArrow("last")
        raycc.setFill("red")
        raycc.draw(win)
        
        raycp = Line(Point(0,135),Point(px,py)) # 平行光折射的反向延長線
        raycp.setWidth(3)
        raycp.setArrow("none")
        raycp.setFill("yellow") # 成虛像的反向延長線用黃色
        raycp.draw(win)
        
    else: # 成實像時過光心后的折射光線
        raycc = Line(Point(0,0),Point(px,py))
        raycc.setWidth(3)
        raycc.setArrow("last")
        raycc.setFill("red")
        raycc.draw(win)
        
    if objX < -10:
        obj.draw(win)   
        phoVR.draw(win)
        rayh.draw(win)
        rayf.draw(win)
        rayp.draw(win)
        rayc.draw(win)
    noteText_loc = objX
        
################## 定義更新成像規律提示標簽子程序
def display_noteText():   
    global noteText_loc    
    noteText.undraw() # 擦除原提示標簽
    noteStr  = ''
    if  -140 < noteText_loc < 0:
        noteStr  = '放大鏡原理,物體在一倍焦距內成放大的虛像'
      
    elif  noteText_loc == -149:
        noteStr  = '物體剛好在焦點不成像'
        
    elif -300 < noteText_loc < -150:
        noteStr  = '投影儀原理,物體在一倍兩倍焦距間成放大實像'
    elif noteText_loc == -300:        
        noteStr  = '物體剛好在兩倍焦距上成等大實像'
    elif noteText_loc < -300:
        noteStr  = '照相機原理,物體在兩倍焦距外成縮小實像'
    noteText.setText(noteStr)
    noteText.setSize(randint(16,26))# 隨機改變字體大小、顏色及位置
    noteText.setTextColor(color_rgb(randint(0,255),randint(0,255),randint(0,255)))
    noteText.move(0,randrange(-10,30,10))
    noteText.draw(win) # 重畫新提示標簽
    
################# 主程序
main()
1N3物理好資源網(原物理ok網)

代碼模式運行1N3物理好資源網(原物理ok網)

代碼中庫文件.py見附件1N3物理好資源網(原物理ok網)

此文件置于如下位置:1N3物理好資源網(原物理ok網)

C:Usersadmin\-py\.6.5-64Lib1N3物理好資源網(原物理ok網)

附件1N3物理好資源網(原物理ok網)

發表評論

統計代碼放這里
主站蜘蛛池模板: 沁源县| 永安市| 大同市| 斗六市| 老河口市| 德化县| 南阳市| 崇明县| 原阳县| 乾安县| 乃东县| 修水县| 南涧| 双峰县| 姚安县| 蚌埠市| 普格县| 迁安市| 耿马| 盖州市| 邯郸市| 宜兰市| 五原县| 敖汉旗| 亚东县| 蕲春县| 舒城县| 吉木萨尔县| 喀喇| 乳山市| 十堰市| 永昌县| 登封市| 山阳县| 东丰县| 安泽县| 轮台县| 唐山市| 方正县| 铁岭市| 抚顺市|