Здравствуйте уважаемые обитатели форума! Помогите построить график с помощью GraphGDIPlus. График должен выйти приблизительно таким (см. вложение), в графике салатовая и зеленая прямые линии должны проходить через точку пересечения синей и оранжевой прямой.
Код.
P.S. За основу был взят этот пример
Код.
Код:
#include "GraphGDIPlus.au3"
#NoTrayIcon
Global $Um, $Rn, $Cf, $f, $k2, $k3, $R1rt, $R2rt, $ktr, $In, $Rtr, $kp, $Ucr, $Ud1, $Ud2, $Ar, $M, $Ov ;здесь могут быль лишние переменные
$GUI = GUICreate("Точка",590,530)
$start = GUICtrlCreateButton("Пересчитать", 470, 460, 97, 33)
$filemenu = GUICtrlCreateMenu("&Справка")
$fileitem = GUICtrlCreateMenuItem("О программе", $filemenu)
$Um00 = GUICtrlCreateInput("100", 10, 298, 40, 20)
GUICtrlCreateLabel("Постоянный расходы, руб.", 55, 300, 190, 17)
$Rn00 = GUICtrlCreateInput("1", 10, 323, 40, 20)
GUICtrlCreateLabel("Переменные расходы на единицу продукции, руб.", 55, 325, 190, 17)
$Cf00 = GUICtrlCreateInput("5", 10, 348, 40, 20)
GUICtrlCreateLabel("Цена единицы, руб.", 55, 350, 190, 17)
$f00 = GUICtrlCreateInput("500", 10, 373, 40, 20)
GUICtrlCreateLabel("Объем реализации, шт.", 55, 375, 360, 17)
_Read()
GUICtrlCreateLabel('', 250, 303, 1, 110 ,0x11)
$Label_In = GUICtrlCreateLabel('', 260, 300, 190, 17)
$Label_Rtr = GUICtrlCreateLabel('', 260, 325, 190, 17)
$Label_kp = GUICtrlCreateLabel('', 260, 350, 190, 17)
$Label_Ucr = GUICtrlCreateLabel('', 260, 375, 250, 17)
GUICtrlSetColor( -1, 0xFF0000)
$Label_Ud1 = GUICtrlCreateLabel('', 260, 400, 250, 17)
GUICtrlSetColor( -1, 0xFF0000)
$Label_Vm = GUICtrlCreateLabel('', 10, 400, 190, 17)
$Label_Ov = GUICtrlCreateLabel('', 10, 425, 190, 17)
; Создание окна диаграммы
$Graph = _GraphGDIPlus_Create($GUI,40,10,530,260,0xFF000000,0xFFCEE3E0)
;отрисовка графиков при старте
_start()
GUISetState ()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $start
_Read()
_start()
Case $msg = $fileitem
MsgBox (0, "О программе", "Точка"&@CRLF&"© bahooo, 2013. All rights reserved")
Case $msg = -3
Exit
EndSelect
WEnd
Func _Read()
$Um = GUICtrlRead($Um00) ;постоянные расходы
$Rn = GUICtrlRead($Rn00) ;переменные расходы на единицу
$Cf = GUICtrlRead($Cf00) ;цена единицы
$f = GUICtrlRead($f00) ;объем реализации
$In=$Cf*$f ;выручка
$Rtr=$Um+($Rn*$f) ;общие расходы
$kp=$In-$Rtr ;прибыль
$Ucr=$Um/($Cf-$Rn) ;мин. объем реализации
$Ud1=$Um+($Rn*$Ucr) ;мин. общие расходы
$M=$kp+$Um ;валовая маржа
$Ov=$M/$kp ;операционный рычаг
EndFunc
Func _start()
_GraphGDIPlus_Clear($Graph)
;----- шкала по оси XY
_GraphGDIPlus_Set_RangeX($Graph,0,20,10,1,0)
_GraphGDIPlus_Set_RangeY($Graph,0,$Um*1.1,10,1,1)
;----- сетка по оси XY
_GraphGDIPlus_Set_GridX($Graph,1,0xFF6993BE)
_GraphGDIPlus_Set_GridY($Graph,$Um*1.1/10,0xFF6993BE)
_GraphGDIPlus_Set_PenSize($Graph,1)
; цвет графиков
_Draw_Graph3(0xFF339966)
_Draw_none() ; обход графика за пределами окна, так как графики рисует одна линия
_Draw_Graph31(0xFF800080)
_Draw_none() ; обход
_Draw_Graph2(0xFFFF6600)
_Draw_none() ; обход
_Draw_Graph1(0xFF0000FF)
_Draw_none() ; обход
_GraphGDIPlus_Refresh($Graph)
; установка параметров после пересчёта
GUICtrlSetData($Label_In,'Выручка '&$In&' руб.')
GUICtrlSetData($Label_Rtr,'Общие расходы '&$Rtr&' руб.')
GUICtrlSetData($Label_kp,'Прибыль '&Round ($kp, 2)&' руб.')
GUICtrlSetData($Label_Ucr,'Минимальный объем реализации '&Round ($Ucr, 1)&' шт.')
GUICtrlSetData($Label_Ud1,'Минимальние расходы '&Round ($Ud1, 2)&' руб.')
GUICtrlSetData($Label_Vm,'Валовая маржа '&$M&' руб.')
GUICtrlSetData($Label_Ov,'Операцыонный рычаг '&Round ($Ov, 2)&' руб.')
EndFunc
Func _Draw_none()
_GraphGDIPlus_Plot_Line($Graph,21,-1)
_GraphGDIPlus_Plot_Line($Graph,-1,-1)
EndFunc
Func _Draw_Graph1($ColorGr)
_GraphGDIPlus_Set_PenColor($Graph,$ColorGr)
For $i = 0 to 20
$yy=$i*3.14/20
$U1=$Um*Sqrt(Cos($yy)^2)*$kp
_GraphGDIPlus_Plot_Line($Graph,$i,$U1)
Next
EndFunc
Func _Draw_Graph2($ColorGr)
_GraphGDIPlus_Set_PenColor($Graph,$ColorGr)
For $i = 0 to 20
$tt=50*$i/$f
$U2=$Um*Exp(-1000*$tt/($Rn*$Cf))*$kp+$k2
_GraphGDIPlus_Plot_Line($Graph,$i,$U2)
Next
EndFunc
Func _Draw_Graph3($ColorGr)
_GraphGDIPlus_Set_PenColor($Graph,$ColorGr)
For $i = 0 to 20
$tt=50*$i/$f
$yy=$i*3.14/20
$U3=($Um-1000*$Um*$tt/($Rn*$Cf)+$k3)*$kp
_GraphGDIPlus_Plot_Line($Graph,$i,$U3)
Next
EndFunc
Func _Draw_Graph31($ColorGr)
_GraphGDIPlus_Set_PenColor($Graph,$ColorGr)
For $i = 0 to 20
$tt=50*$i/$f
$U31=(Cos($Ar)-Sin($Ar)*($tt*3.14/10-$Ar))*$Um*$kp
_GraphGDIPlus_Plot_Line($Graph,$i,$U31)
Next
EndFunc
P.S. За основу был взят этот пример