إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

رسم منحى بياني للدوال

تقليص
هذا الموضوع مغلق.
X
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • رسم منحى بياني للدوال

    السلام عليكم ورحمة الله
    أعجبت كثيرا بهذه الأكواد التي تستطيع بنسخها في برنامج autoit
    الحصول على أداة متكاملة ترسم منحى بياني لجل الدوال
    إليك بالأكواد واذ رغبت أخي تحويلها لتنفيذي فلابأس
    كود:
    #NoTrayIcon
    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>
    #include <Misc.au3>
    
    Global $DesktopWidth  =@DesktopWidth ;Number(IniRead(@ScriptDir & "\conf.ini","Dimensiones","Ancho",800))
    Global $DesktopHeight =@DesktopHeight ;Number(IniRead(@ScriptDir & "\conf.ini","Dimensiones","Alto",600))
    
    
    
    
    Dim $CoordOrigen[2]	=	[$DesktopWidth/2+2,$DesktopHeight/2-2]
    Global $escY
    Global $escX
    Global $ColorFondo		=	IniRead(@ScriptDir & "\conf.ini","Colores","Fondo",0xFFFFFF)
    Global $ColorGrafica		=	IniRead(@ScriptDir & "\conf.ini","Colores","Grafica",0xFF0000)
    Global $ColorCuadricula=	IniRead(@ScriptDir & "\conf.ini","Colores","Cuadricula",0xE7E7E7)
    Global $ColorEjes			=	IniRead(@ScriptDir & "\conf.ini","Colores","Ejes",0x000000)
    Global $Main,$child
    Global $MostrarCuadricula	=False
    Global $MostrarEscala			=False
    
    $Main = GUICreate("Drawer - © Nahuel", 568, 195)
    $inpFunc = GUICtrlCreateInput("", 60, 6, 181, 21)
    GUICtrlCreateLabel("f(x)=", 18, 6, 40, 24)
    GUICtrlSetFont(-1, 12, 800, 2, "Microsoft Sans Serif")
    $Button1 = GUICtrlCreateButton("Sin()", 18, 44, 51, 21, 0)
    $Button2 = GUICtrlCreateButton("ASin()", 72, 44, 51, 21, 0)
    $Button3 = GUICtrlCreateButton("Cos()", 18, 71, 51, 21, 0)
    $Button4 = GUICtrlCreateButton("ACos()", 72, 71, 51, 21, 0)
    $Button6 = GUICtrlCreateButton("Tan()", 18, 98, 51, 21, 0)
    $Button7 = GUICtrlCreateButton("ATan()", 72, 98, 51, 21, 0)
    $Button8 = GUICtrlCreateButton("ln()", 146, 44, 51, 21, 0)
    $Button9	= GUICtrlCreateButton("V¯", 200, 44, 51, 21, 0)
    $Button10 = GUICtrlCreateButton("| X |", 146, 71, 51, 21, 0)
    $Button11= GUICtrlCreateButton("X", 200, 71, 51, 21, 0)
    $Button12 = GUICtrlCreateButton(")", 146, 98, 51, 21, 0)
    $Button13 = GUICtrlCreateButton("^", 200, 98, 51, 21, 0)
    $Button14 = GUICtrlCreateButton("+", 18, 134, 51, 21, 0)
    $Button15 = GUICtrlCreateButton("*", 72, 134, 51, 21, 0)
    $Button16 = GUICtrlCreateButton("-", 18, 160, 51, 21, 0)
    $Button17 = GUICtrlCreateButton("/", 72, 160, 51, 21, 0)
    $Button18 = GUICtrlCreateButton("&Draw graph", 146, 134, 105, 49, $BS_DEFPUSHBUTTON)
    
    $Slider1 = GUICtrlCreateSlider(262, 42, 161, 19)
    GUICtrlSetLimit(-1,100,10)
    GUICtrlSetData(-1,25)
    $Slider2 = GUICtrlCreateSlider(262, 80, 161, 19)
    GUICtrlSetLimit(-1,100,10)
    GUICtrlSetData(-1,25)
    
    GUICtrlCreateLabel("X axis scale", 306, 28, 64, 17)
    GUICtrlCreateLabel("Y axis scale", 308, 66, 64, 17)
     GUICtrlCreateGroup("", 256, 16, 297, 171)
     
    GUICtrlCreateLabel("Bgnd color:", 264, 108,80, 17)
    $lab_ColorFondo=GUICtrlCreateLabel("", 352, 108, 24, 17)
    GUICtrlSetBkColor(-1,$ColorFondo)
    $CambiarColorFondo= GUICtrlCreateButton("Change", 384, 106, 61, 17, 0)
    GUICtrlCreateLabel("Graph color:", 264, 127, 63, 17)
    $lab_ColorGrafica=GUICtrlCreateLabel("", 352, 126, 24, 17)
    GUICtrlSetBkColor(-1,$ColorGrafica)
    $CambiarColorGrafica = GUICtrlCreateButton("Change", 384, 125, 61, 17, 0)
    GUICtrlCreateLabel("Grid color:", 264, 146, 82, 17)
    $lab_ColorCuad=GUICtrlCreateLabel("", 352, 144, 24, 17)
    GUICtrlSetBkColor(-1,$ColorCuadricula)
    $CambiarColorCuad = GUICtrlCreateButton("Change", 384, 144, 61, 17, 0)
    
     GUICtrlCreateLabel("Axis color", 264, 164, 50, 17)
    $lab_ColorEjes=GUICtrlCreateLabel("", 352, 164, 24, 17)
    GUICtrlSetBkColor(-1,$ColorEjes)
    $CambiarColorEjes = GUICtrlCreateButton("Change", 384, 164, 61, 17, 0)
    
    $CheckboxMostrarCuad = GUICtrlCreateCheckbox("Show grid", 438, 44, 111, 15)
    GUICtrlSetState(-1,$GUI_CHECKED)
    $CheckboxMostrarEsca = GUICtrlCreateCheckbox("Show scale", 438, 80, 111, 15)
    GUICtrlSetState(-1,$GUI_CHECKED)
    
    $GuardarConf = GUICtrlCreateButton("Save", 458, 120, 75, 27, 0)
    $ResetConf 	= GUICtrlCreateButton("Restore", 458, 150, 75, 27, 0)
    
    
    GUISetState(@SW_SHOW)
    
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case -3
    			Exit
    		Case $CambiarColorEjes
    			$newColor=_ChooseColor(2,$ColorEjes,2,$Main)
    			If @error Then ContinueLoop
    			GUICtrlSetBkColor($lab_ColorEjes,$newColor)
    			$ColorEjes=$newColor
    		Case $CambiarColorCuad	
    			$newColor=_ChooseColor(2,$ColorCuadricula,2,$Main)
    			If @error Then ContinueLoop
    			GUICtrlSetBkColor($lab_ColorCuad,$newColor)
    			$ColorCuadricula=$newColor
    		Case $CambiarColorFondo
    			$newColor=_ChooseColor(2,$ColorFondo,2,$Main)
    			If @error Then ContinueLoop
    			GUICtrlSetBkColor($lab_ColorFondo,$newColor)
    			$ColorFondo=$newColor
    		Case $CambiarColorGrafica
    			$newColor=_ChooseColor(2,$ColorGrafica,2,$Main)
    			If @error Then ContinueLoop
    			GUICtrlSetBkColor($lab_ColorGrafica,$newColor)
    			$ColorGrafica=$newColor	
    		Case $GuardarConf
    			 IniWrite(@ScriptDir & "\conf.ini","Colores","Fondo",$ColorFondo)
    			IniWrite(@ScriptDir & "\conf.ini","Colores","Grafica", $ColorGrafica)
    			IniWrite(@ScriptDir & "\conf.ini","Colores","Cuadricula", $ColorCuadricula)
    			IniWrite(@ScriptDir & "\conf.ini","Colores","Ejes",  $ColorEjes)			
    			_MsgBox(64,"Saved","Your color preferences have been saved",$Main)
    		Case $ResetConf
    			FileDelete(@ScriptDir & "\conf.ini")
    			$ColorFondo=0xFFFFFF
    			$ColorGrafica=0xFF0000
    			$ColorCuadricula=0xE7E7E7
    			$ColorEjes=0x000000
    			GUICtrlSetBkColor($lab_ColorGrafica,$ColorGrafica)
    			GUICtrlSetBkColor($lab_ColorFondo,$ColorFondo)
    			GUICtrlSetBkColor($lab_ColorCuad,$ColorCuadricula)
    			GUICtrlSetBkColor($lab_ColorEjes,$ColorEjes)
    		Case $Button1
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"Sin(")
    		Case $Button2
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"ASin(")
    		Case $Button3
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"Cos(")
    		Case $Button4
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"ACos(")
    		Case $Button6
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"Tan(")
    		Case $Button7
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"ATan(")
    		Case $Button8
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"Log(")
    		Case $Button9
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"Sqrt(")
    		Case $Button10
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"Abs(")
    		Case $Button11
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"X")
    		Case $Button12
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&")")
    		Case $Button13
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"^")
    		Case $Button14
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"+")
    		Case $Button15
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"*")
    		Case $Button16
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"-")
    		Case $Button17
    			ControlFocus($Main,"",$inpFunc)
    			GUICtrlSetData($inpFunc,GUICtrlRead($inpFunc)&"/")
    		Case $Button18
    			$Func=GUICtrlRead($inpFunc)
    			
    			$ParentesisA=StringSplit($Func,"(")
    			$ParentesisC=StringSplit($Func,")")
    			
    			If Not IsArray($ParentesisA) Then 
    				Dim $ParentesisA[1]=[0]
    			EndIf
    			If Not IsArray($ParentesisC) Then
    				Dim $ParentesisC[1]=[0]
    			EndIf
    			
    			If $ParentesisA[0]>$ParentesisC[0] Then
    				$ParsQueFaltan=$ParentesisA[0]-$ParentesisC[0]
    				$FuncNueva=$Func
    				For $i=0 To $ParsQueFaltan-1
    					$FuncNueva&=")"
    				Next
    				Dim $iMsgBoxAnswer
    				$iMsgBoxAnswer = _MsgBox(52,"Error in expression","Unbalanced bracket expression." & @CRLF & "Accept correction?" & @CRLF & $FuncNueva,$Main)
    				Select
    					Case $iMsgBoxAnswer = 6 ;Yes
    						GUICtrlSetData($inpFunc,$FuncNueva)
    						_Graficar($FuncNueva)
    				   Case $iMsgBoxAnswer = 7 ;No
    						ContinueLoop
    				EndSelect
    			ElseIf $ParentesisA[0]<$ParentesisC[0] Then
    				_MsgBox(48,"Error in expression","Unbalanced bracket expression.",$Main)
    			ElseIf $ParentesisA[0]=$ParentesisC[0] Then
    				_Graficar($Func)
    			EndIf			
    	EndSwitch
    WEnd
    
    Func _Graficar($strFunc)
    	$escX=Number(GUICtrlRead($Slider1))
    	$escY=Number(GUICtrlRead($Slider2))
    	$MostrarCuadricula=False
    	$MostrarEscala=False
    	If GUICtrlRead($CheckboxMostrarCuad)=$GUI_CHECKED Then $MostrarCuadricula=True
    	If GUICtrlRead($CheckboxMostrarEsca)=$GUI_CHECKED Then $MostrarEscala=True
    	
    	
    	$child=GUICreate("",$DesktopWidth,$DesktopHeight,-1,-1,-1,-1,$Main)
    
    	GUISetBkColor($ColorFondo,$child);Color blanco de fondo
    	$exit=GUICtrlCreateButton("&Exit",$DesktopWidth-150,$DesktopHeight-50,100);Botَn
    	GUIctrlSetCursor(-1,2)
    	
    	_DibuarEjes()
    	
    	$grafico = GUICtrlCreateGraphic(0,0,$DesktopWidth,$DesktopHeight)
    	GUISetCursor(3,1)
    	GUICtrlSetGraphic(-1,$GUI_GR_COLOR,$ColorGrafica)
    	$strFunc=String("-(" & $strFunc & ")*"&$escY)
    	SplashTextOn("",@CRLF&"Drawing...",150,57,-1,-1,1)
    	
    ;~ 	GUICtrlSetGraphic(-1,$GUI_GR_COLOR,$ColorGrafica)
    	;Dibujar grلfica:
    	Dim $Asintotas[1]
    
    	$asC=0
    
    	For $X=-$CoordOrigen[0] To $CoordOrigen[0] 
    		GUICtrlSetGraphic($grafico	,$GUI_GR_COLOR,$ColorGrafica)
    		$exFunc=$strFunc
    		$exFunc=StringReplace($exFunc,"x",$X/$escX)
    		$Y=Execute($exFunc)
    		If StringInStr(String($Y),"INF") Then
    			$Asintotas[$asC]="Vertical Asymptote at X=" & $X/$escX
    			$asC+=1
    			ReDim $Asintotas[$asC+1]
    		EndIf
    		GUICtrlSetGraphic($grafico,$GUI_GR_LINE,$CoordOrigen[0]+$X-2,$CoordOrigen[1]+$Y+2)
    
    	Next
    	GUICtrlSetGraphic($grafico,$GUI_GR_MOVE,0,0)
    	GUICtrlSetGraphic($grafico,$GUI_GR_CLOSE+$GUI_GR_DOT)	
    	
    	SplashOff()
    	GUISetState()
    	$strAsintotas=""
    	If $asC>0 Then
    		For $i=0 To UBound($Asintotas)-1
    			$strAsintotas&=@CRLF&$Asintotas[$i] 
    		Next
    	EndIf
    	
    	While 1
    		$nMsg=GUIGetMsg()
    		if $nMsg=-3 Or $nMsg=$exit Then ExitLoop
    		$mousepos=MouseGetPos()
    		$x_tooltip=($mousepos[0]-$CoordOrigen[0])/$escX
    		$y_tooltip=(-$mousepos[1]+$CoordOrigen[1])/$escY
    
    		ToolTip("X: " & $x_tooltip & ", Y: "& $y_tooltip & @CRLF	 & $strAsintotas,$mousepos[0]+5,$mousepos[1]+5,"Coords")
    
    		Sleep(25)
    	WEnd
    	ToolTip("")
    	GUIDelete()
    EndFunc
    
    Func _MsgBox($iFlags, $sTitle, $sText, $hWnd = 0)
    	Local $aRet = DllCall('user32.dll', 'int', 'MessageBox', 'hwnd', $hWnd, 'str', $sText, 'str', $sTitle, 'uint', $iFlags)
    	Return $aRet[0]
    EndFunc   ;==>_MsgBox
    
    Func _DibuarEjes()
    
    	$gEje_Y=GUICtrlCreateGraphic($DesktopWidth/2,0,1,$DesktopHeight);Eje Y
    	GUICtrlSetBkColor(-1,$ColorEjes)
    	$x=0
    	For $i=$CoordOrigen[1] To $DesktopHeight Step $escY
    		GUICtrlSetGraphic($gEje_Y,$GUI_GR_DOT,0,$i+2)
    		If $MostrarEscala Then
    			GUICtrlCreateLabel(-$x,$CoordOrigen[0],$i+2)
    			GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    		EndIf
    		if $MostrarCuadricula Then 
    			GUICtrlCreateGraphic(0,$i+2,$DesktopWidth,1)
    			GUICtrlSetColor(-1,$ColorCuadricula)
    		EndIf
    		$x+=1
    	Next
    	$x=0
    	For $i=$CoordOrigen[1] To 0 Step -$escY
    		GUICtrlSetGraphic($gEje_Y,$GUI_GR_DOT,0,$i+2)
    		If $MostrarEscala Then
    			GUICtrlCreateLabel($x,$CoordOrigen[0],$i+2)
    			GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    		EndIf
    		If $MostrarCuadricula Then
    			GUICtrlCreateGraphic(0,$i+2,$DesktopWidth,1)
    			GUICtrlSetColor(-1,$ColorCuadricula)
    		EndIf
    		$x+=1
    	Next
    	
    	$gEje_X=GUICtrlCreateGraphic(0,$DesktopHeight/2,$DesktopWidth,1);Eje X
    	GUICtrlSetBkColor(-1,$ColorEjes)
    	$x=-1
    	For $i=$CoordOrigen[0] To $DesktopWidth Step $escX
    		$x+=1
    		GUICtrlSetGraphic($gEje_X,$GUI_GR_DOT,$i-2,0)
    		If $x=0 Then ContinueLoop
    		If $MostrarCuadricula then
    			GUICtrlCreateGraphic($i-2,0,1,$DesktopHeight)
    			GUICtrlSetColor(-1,$ColorCuadricula)
    		EndIf
    		If $MostrarEscala then
    			GUICtrlCreateLabel($x,$i+2,$CoordOrigen[1]+3)
    			GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    		EndIf
    	Next
    	$x=-1
    	For $i=$CoordOrigen[0] To 0 Step -$escX
    		$x+=1
    		GUICtrlSetGraphic($gEje_X,$GUI_GR_DOT,$i-2,0)
    		If $x=0 Then ContinueLoop
    		If $MostrarCuadricula Then
    			GUICtrlCreateGraphic($i-2,0,1,$DesktopHeight)	
    			GUICtrlSetColor(-1,$ColorCuadricula)
    		EndIf
    		If $MostrarEscala Then
    			GUICtrlCreateLabel(-$x,$i+2,$CoordOrigen[1]+3)
    			GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    		EndIf
    	Next	
    EndFunc
    موفق

  • #2
    جزاك الله خيرا اخانا ابا بلقيس

    جهود مباركة

    .

    تعليق


    • #3
      المشاركة الأصلية بواسطة محمود ربيع
      مشكووووور على المجهود
      شكرا جزيلا

      تعليق


      • #4
        جزاك الله خيرا أخى ابا بلقيس

        بارك الله في جهودك

        تعليق


        • #5
          شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

          تعليق


          • #6
            خالص الشكر والامتنان على ما بذلتموه من جهود مباركة

            تعليق


            • #7
              مرور عطر اخواني

              تعليق


              • #8
                شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

                تعليق

                مواضيع تهمك

                تقليص

                المنتدى: القسم العام نشرت بواسطة: ماريا عبد الله الوقت: 06-08-2025 الساعة 11:33 PM
                المنتدى: القسم العام نشرت بواسطة: ماريا عبد الله الوقت: 06-04-2025 الساعة 05:29 PM
                المنتدى: القسم العام نشرت بواسطة: ماريا عبد الله الوقت: 05-31-2025 الساعة 10:07 PM
                المنتدى: القسم العام نشرت بواسطة: ماريا عبد الله الوقت: 05-30-2025 الساعة 11:48 PM
                المنتدى: التصنيع والانتاج نشرت بواسطة: HaMooooDi الوقت: 05-30-2025 الساعة 09:36 AM
                يعمل...
                X