Вверх ↑
Этот топик читают: Гость
Ответов: 170
Рейтинг: 1
#1: 2025-10-10 15:02:33 ЛС | профиль | цитата
Доброго дня. Как провести прямую на графике через две точки A и B чтобы она всегда проходила через эти точки и не "убегала" при изменении графика ?


Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,63,280)
{
Width=1351
Height=764
WindowsState=2
link(onCreate,2171490:doEvent1,[(103,300)(103,335)])
}
Add(Plotter,12892324,728,119)
{
Left=-5
Top=-10
Width=1330
Height=660
Name="123"
GridX=20
GridY=20
MinH=-2
MaxH=2
MinW=-5
MaxW=5
MouseControl=1
Point(doMaxH)
Point(doMinH)
Point(onMouseWheel)
Point(doMaxW)
link(onMouseWheel,98667:doCompare,[(772,125)(772,205)(548,205)(548,286)])
}
Add(PlotAxis,13638926,728,35)
{
Grapher="123"
Color=0
Style=2
}
Add(PlotAxis,8991717,665,35)
{
Grapher="123"
Color=0
Style=2
Angle=90
}
Add(PlotPoints,16350363,196,294)
{
Grapher="123"
Size=3
Name="1"
Shape=2
link(onAdd,10713502:doAxis,[(244,300)(244,363)])
link(ValueY,13094846:Var1,[(202,253)])
link(ValueX,3599729:Var2,[(209,257)(223,257)])
}
Add(Memory,12132263,175,126)
{
Default=String(-2)
}
Add(Memory,11325255,245,126)
{
Default=String(-1)
}
Add(PointHint,13195512,126,126)
{
Info=#1:X|
Width=29
Height=25
}
Add(PointHint,5324795,294,126)
{
Info=#1:Y|
Width=29
Height=25
}
Add(Hub,8319343,602,154)
{
link(onEvent1,11726241:doOperation,[(630,160)(630,132)])
link(onEvent2,13914399:doOperation,[(630,167)(630,188)])
}
Add(Math,13914399,644,182)
{
Op2=-2
link(onResult,12892324:doMinH,[(702,188)(702,139)])
}
Add(Math,11726241,644,126)
{
Op2=2
link(onResult,12892324:doMaxH,[])
}
Add(If_else,98667,560,280)
{
Op2=String(120)
link(onTrue,4764878:doOperation,[(618,286)(618,293)])
link(onFalse,12905359:doOperation,[(618,293)(618,391)])
}
Add(Memory,14752883,721,315)
{
Default=String(0)
link(onData,8352143:doCompare,[(765,321)(765,237)(471,237)(471,153)])
}
Add(Math,12905359,644,385)
{
OpType=1
Op2=0.5
link(onResult,10488796:doEvent2,[(698,391)(698,398)])
link(Op1,10495885:Var1,[(650,327)])
}
Add(Math,4764878,644,287)
{
Op2=0.5
link(onResult,10488796:doEvent1,[(698,293)(698,391)])
link(Op1,10495885:Var2,[(650,275)(688,275)])
}
Add(GetDataEx,10495885,682,322)
{
Angle=2
link(Data,14752883:Value,[(688,359)(727,359)])
}
Add(Hub,10488796,721,385)
{
InCount=2
OutCount=1
link(onEvent1,14752883:doValue,[(747,391)(747,356)(709,356)(709,321)])
}
Add(If_else,8352143,483,147)
{
Op2=String(2)
link(onFalse,12178600:doCompare,[(527,160)(527,153)])
}
Add(If_else,12178600,539,147)
{
Op2=String(-2)
link(onFalse,8319343:doEvent1,[])
}
Add(TrackBar,2420342,707,182)
{
Left=5
Top=665
Width=1170
Max=30
Min=1
Position=5
link(onPosition,12892324:doMaxW,[(751,188)(751,167)(716,167)(716,146)])
}
Add(PlotAxis,10713502,259,357)
{
Grapher="123"
Color=0
Angle=45
link(X,3599729:Var3,[(265,216)])
link(Y,13094846:Var2,[(272,307)(251,307)])
}
Add(GetDataEx,13094846,245,248)
{
link(Data,11325255:Value,[])
}
Add(GetDataEx,3599729,217,211)
{
Angle=3
link(Data,12132263:Value,[(181,216)])
}
Add(PlotPoints,4985497,224,525)
{
Grapher="123"
Color=16711680
Size=3
Name="2"
Shape=2
link(ValueY,11809859:Value,[(230,499)(300,499)])
link(ValueX,13798332:Value,[])
}
Add(Hub,2171490,112,329)
{
link(onEvent1,16350363:doAdd,[(161,335)(161,300)])
link(onEvent2,4985497:doAdd,[(150,342)(150,531)])
}
Add(Memory,13798332,231,441)
{
Default=String(0.5)
}
Add(Memory,11809859,294,441)
{
Default=String(1.6)
}
Add(PointHint,14863803,175,441)
{
Info=#1:X|
Width=29
Height=25
}
Add(PointHint,15771444,343,441)
{
Info=#1:Y|
Width=29
Height=25
}
Add(PlotSeriesMarker,8960325,329,357)
{
Grapher="123"
TextList=#1:A|0:|
Series="1"
}
Add(PlotSeriesMarker,2718198,287,525)
{
Grapher="123"
TextList=#1:B|
Series="2"
}
карма: 1

0
Ответов: 528
Рейтинг: 167
#2: 2025-10-13 12:40:21 ЛС | профиль | цитата
Andrej77rv , добрый день, вариант костыльный , возможно будут более дельные предложения )
Add(MainForm,5799316,483,399)
{
Width=1351
Height=764
WindowsState=2
link(onCreate,2171490:doEvent1,[])
}
Add(Plotter,12892324,1148,182)
{
Left=-5
Top=-10
Width=1330
Height=660
Name="123"
GridX=20
GridY=20
MinH=-2
MaxH=2
MinW=-5
MaxW=5
MouseControl=1
Point(doMaxH)
Point(doMinH)
Point(onMouseWheel)
Point(doMaxW)
link(onMouseWheel,98667:doCompare,[(1192,188)(1192,268)(968,268)(968,349)])
}
Add(PlotAxis,13638926,1148,98)
{
Grapher="123"
Color=0
Style=2
}
Add(PlotAxis,8991717,1085,98)
{
Grapher="123"
Color=0
Style=2
Angle=90
}
Add(PlotPoints,16350363,616,357)
{
Grapher="123"
Size=3
Name="1"
Shape=2
link(ValueY,13094846:Var1,[(622,313)])
link(ValueX,3599729:Var2,[(629,320)(643,320)])
}
Add(Memory,12132263,595,189)
{
Default=String(-2)
}
Add(Memory,11325255,665,189)
{
Default=String(-1)
}
Add(PointHint,13195512,546,189)
{
Info=#2:X1|
Width=29
Height=25
}
Add(PointHint,5324795,714,189)
{
Info=#2:Y1|
Width=29
Height=25
}
Add(Hub,8319343,1022,217)
{
link(onEvent1,11726241:doOperation,[(1050,223)(1050,195)])
link(onEvent2,13914399:doOperation,[(1050,230)(1050,251)])
}
Add(Math,13914399,1064,245)
{
Op2=-2
link(onResult,12892324:doMinH,[(1122,251)(1122,202)])
}
Add(Math,11726241,1064,189)
{
Op2=2
link(onResult,12892324:doMaxH,[])
}
Add(If_else,98667,980,343)
{
Op2=String(120)
link(onTrue,4764878:doOperation,[(1038,349)(1038,356)])
link(onFalse,12905359:doOperation,[(1038,356)(1038,454)])
}
Add(Memory,14752883,1141,378)
{
Default=String(0)
link(onData,8352143:doCompare,[(1185,384)(1185,300)(891,300)(891,216)])
}
Add(Math,12905359,1064,448)
{
OpType=1
Op2=0.5
link(onResult,10488796:doEvent2,[(1118,454)(1118,461)])
link(Op1,10495885:Var1,[(1070,390)])
}
Add(Math,4764878,1064,350)
{
Op2=0.5
link(onResult,10488796:doEvent1,[(1118,356)(1118,454)])
link(Op1,10495885:Var2,[(1070,338)(1105,338)])
}
Add(GetDataEx,10495885,1099,385)
{
Angle=2
link(Data,14752883:Value,[(1105,422)(1147,422)])
}
Add(Hub,10488796,1141,448)
{
InCount=2
OutCount=1
link(onEvent1,14752883:doValue,[(1167,454)(1167,419)(1129,419)(1129,384)])
}
Add(If_else,8352143,903,210)
{
Op2=String(2)
link(onFalse,12178600:doCompare,[(947,223)(947,216)])
}
Add(If_else,12178600,959,210)
{
Op2=String(-2)
link(onFalse,8319343:doEvent1,[])
}
Add(TrackBar,2420342,1127,245)
{
Left=5
Top=665
Width=1170
Max=30
Position=5
link(onPosition,12892324:doMaxW,[(1176,251)(1176,230)(1136,230)(1136,209)])
}
Add(PlotAxis,10713502,728,357)
{
Grapher="123"
Color=0
Angle=45
link(X,16322095:Var2,[])
link(Y,13100609:Var2,[(741,344)(671,344)])
}
Add(GetDataEx,13094846,665,308)
{
link(Data,11325255:Value,[])
}
Add(GetDataEx,3599729,637,273)
{
Angle=3
link(Data,12132263:Value,[(601,278)])
}
Add(PlotPoints,4985497,644,588)
{
Grapher="123"
Color=16711680
Size=3
Name="2"
Shape=2
link(ValueY,9077474:Var1,[(650,558)])
link(ValueX,13877566:Var2,[])
}
Add(Hub,2171490,532,413)
{
OutCount=3
link(onEvent1,13045913:doStart,[])
link(onEvent2,16350363:doAdd,[(581,426)(581,363)])
link(onEvent3,4985497:doAdd,[(595,433)(595,594)])
}
Add(Memory,13798332,651,504)
{
Default=String(0.5)
}
Add(Memory,11809859,721,504)
{
Default=String(1.6)
}
Add(PointHint,14863803,595,504)
{
Info=#2:X2|
Width=29
Height=25
}
Add(PointHint,15771444,763,504)
{
Info=#2:Y2|
Width=29
Height=25
}
Add(PlotSeriesMarker,8960325,1148,602)
{
Grapher="123"
TextList=#1:A|0:|
Series="1"
}
Add(PlotSeriesMarker,2718198,791,616)
{
Grapher="123"
TextList=#1:B|
Series="2"
}
Add(PlotLines,4908245,840,469)
{
Grapher="123"
Color=0
Name="lim"
link(ValueY,13045913:V_Y,[])
link(ValueX,13045913:V_X,[])
}
Add(GetDataEx,13100609,665,329)
{
link(Data,13094846:Var2,[])
}
Add(GetDataEx,16322095,728,308)
{
link(Data,3599729:Var3,[(734,278)])
}
Add(GetDataEx,13877566,651,546)
{
link(Data,13798332:Value,[])
}
Add(GetDataEx,9077474,721,553)
{
link(Data,11809859:Value,[])
}
Add(MultiElementEx,13045913,840,413)
{
link(X1,16322095:Var3,[(846,313)])
link(X2,13877566:Var3,[(853,360)(796,360)(796,551)])
link(Y1,13100609:Var3,[(860,334)])
link(Y2,9077474:Var3,[(867,347)(809,347)(809,558)])
link(onData,4908245:doAdd,[(891,419)(891,460)(828,460)(828,475)])
link(Ext,6460224:Value,[(874,405)(888,405)])
}
BEGIN_SDK
Add(EditMultiEx,8896262,21,21)
{
WorkCount=#7:doStart|
EventCount=#6:onData|
VarCount=#3:V_Y|3:V_X|
DataCount=#2:X1|2:X2|2:Y1|2:Y2|3:Ext|
Width=384
Height=368
VOffset=35
HOffset=35
link(V_Y,5313561:Var,[(62,357)(167,357)])
link(V_X,7702554:Var,[(69,368)(328,368)])
link(doStart,14432124:doOperation,[(42,62)(42,104)])
}
Add(MathParse,2279904,161,105)
{
@Hint=#20:Расчёт углового кооф|
DataCount=4
MathStr="(%4 - %3) / (%2 - %1)"
link(onResult,3611920:doCalc,[])
link(X1,11990014:Var2,[])
link(X2,9209211:Var2,[])
link(X3,7300354:Var2,[])
link(X4,8896262:Y2,[(188,48)(83,48)])
}
Add(If_else,1338313,112,98)
{
Op2=Integer(0)
link(onTrue,10168997:In,[(153,104)(153,34)])
link(onFalse,2279904:doCalc,[])
}
Add(Math,14432124,63,98)
{
OpType=1
link(onResult,1338313:doCompare,[])
link(Op1,9104436:Var2,[])
link(Op2,13364400:Var2,[])
}
Add(GetDataEx,13364400,70,63)
{
Angle=3
link(Data,8896262:X1,[(62,68)])
}
Add(GetDataEx,9104436,63,56)
{
link(Data,8896262:X2,[])
}
Add(MathParse,3611920,210,105)
{
@Hint=#15:Расчёт смещения|
DataCount=3
MathStr="%2-%1*%3 "
link(onResult,3482928:doCalc,[])
link(X2,7300354:Var3,[(223,54)])
link(X3,7658257:Var2,[])
}
Add(GetDataEx,7300354,175,49)
{
Angle=3
link(Data,8896262:Y1,[(76,54)])
}
Add(GetDataEx,11990014,161,63)
{
Angle=3
link(Data,13364400:Var3,[])
}
Add(MathParse,3482928,259,105)
{
@Hint=#5:x_min|0:|
DataCount=3
MathStr="min(%1, %2) - %3"
link(onResult,5667487:doCalc,[])
link(X1,10009016:Var2,[])
link(X2,1953833:Var2,[])
link(X3,6182693:Var2,[])
}
Add(GetDataEx,7658257,224,63)
{
Angle=3
link(Data,11990014:Var3,[])
}
Add(GetDataEx,9209211,168,56)
{
Angle=3
link(Data,9104436:Var3,[])
}
Add(MathParse,5667487,308,105)
{
@Hint=#5:x_max|0:|
DataCount=3
MathStr="max(%1, %2) + %3"
link(onResult,5663699:doEvent1,[(348,111)(348,150)(116,150)(116,202)])
link(X1,10009016:Var3,[(314,68)])
link(X2,1953833:Var3,[(321,61)])
link(X3,6182693:Var3,[(328,40)])
}
Add(GetDataEx,10009016,259,63)
{
Angle=3
link(Data,7658257:Var3,[])
}
Add(GetDataEx,1953833,266,56)
{
Angle=3
link(Data,9209211:Var3,[])
}
Add(GetDataEx,6182693,273,35)
{
Angle=3
link(Data,8896262:Ext,[(90,40)])
}
Add(MathParse,15011012,161,196)
{
@Hint=#5:y_min|
DataCount=3
MathStr="%1 * %3 + %2"
link(onResult,8841571:doWork1,[(245,202)(245,244)])
link(X1,15996982:Var2,[])
link(X2,8150550:Var1,[(174,159)])
link(X3,15874523:Var1,[(181,166)])
}
Add(MathParse,3495654,203,245)
{
@Hint=#5:y_max|
DataCount=3
MathStr="%1 * %3 + %2"
link(onResult,8841571:doWork2,[])
link(X1,15996982:Var3,[(209,180)])
link(X2,8150550:Var3,[(216,159)])
link(X3,8836248:Var1,[(223,180)])
}
Add(GetDataEx,15996982,161,175)
{
link(Data,2279904:Result,[])
}
Add(GetDataEx,8150550,210,154)
{
link(Data,3611920:Result,[])
}
Add(GetIndexData,7702554,322,238)
{
link(onIndex,5313561:doIndex,[(369,244)(369,346)(142,346)(142,307)])
link(Data1,15874523:Var3,[(328,166)])
link(Data2,8836248:Var3,[(335,180)])
}
Add(ChanelToIndex,8841571,259,238)
{
link(onIndex,7702554:doIndex,[])
}
Add(Hub,5663699,126,196)
{
link(onEvent1,15011012:doCalc,[])
link(onEvent2,3495654:doCalc,[(152,209)(152,251)])
}
Add(GetIndexData,5313561,161,301)
{
link(onIndex,8896262:onData,[(394,307)(394,62)])
link(Data1,15011012:Result,[])
link(Data2,3495654:Result,[(174,286)(209,286)])
}
Add(GetDataEx,15874523,259,161)
{
link(Data,3482928:Result,[])
}
Add(GetDataEx,8836248,308,175)
{
link(Data,5667487:Result,[])
}
Add(LineBreak,5943570,427,49)
{
Caption="Если X1 = X2 другой алгоритм"
Primary=[10168997,0,-21]
}
END_SDK
Add(Memory,6460224,882,364)
{
@Hint=#37:Единица удлинение линии в обе стороны|
Default=Integer(10)
}


Редактировалось 1 раз(а), последний 2025-10-13 12:59:45
карма: 4

0
Ответов: 8974
Рейтинг: 824
#3: 2025-10-13 15:34:01 ЛС | профиль | цитата
Andrej77rv, какие-то у вас хотелки странные
Хотелка


Add(MainForm,2953706,147,63)
{
Left=300
Top=100
Height=360
link(onCreate,6935032:doEvent1,[])
}
Add(Plotter,3420938,350,70)
{
Width=384
Height=321
Align=5
Name="MyPl"
MinH=-10
MaxH=10
LeftMargin=70
RightMargin=10
TopMargin=5
MouseControl=3
}
Add(PlotLines,7392247,350,161)
{
Grapher="MyPl"
MaxValues=360
link(ValueX,988847:Result,[(363,152)(342,152)(342,201)(244,201)])
}
Add(Timer,13232622,140,161)
{
Interval=10
link(onTimer,8106150:doNext,[])
}
Add(Counter,8106150,182,161)
{
Max=359
link(onNext,988847:doCalc,[])
}
Add(MathParse,988847,238,161)
{
DataCount=1
MathStr="sin(%1)*8 - sin(%1*16)"
AngleMode=1
link(onResult,6322979:doCalc,[])
}
Add(MathParse,6322979,287,161)
{
DataCount=1
MathStr="cos(%1)*8 + cos(%1*16)"
AngleMode=1
link(onResult,7392247:doAdd,[])
link(X1,8106150:Count,[(293,152)(227,152)(227,205)(188,205)])
}
Add(PlotLines,295095,350,385)
{
Grapher="MyPl"
Color=16711680
MaxValues=2
link(ValueY,9643979:Var,[(356,369)(328,369)])
link(ValueX,10133507:Var,[(363,369)(391,369)])
}
Add(PlotMouseValues,80191,140,259)
{
Grapher="MyPl"
link(onMouseDown,16097024:doEvent1,[])
}
Add(MT_String,12612380,210,259)
{
link(onResult,4292720:doCompare,[])
}
Add(If_else,4292720,266,259)
{
Op2=Integer(1)
link(onTrue,6215852:doSplit,[])
link(onFalse,16427426:doSplit,[])
link(Op1,80191:Button,[(272,250)(257,250)(257,299)(146,299)])
}
Add(MultiStrPart,6215852,315,259)
{
}
Add(MultiStrPart,16427426,385,266)
{
}
Add(GetIndexData,10133507,385,329)
{
link(onIndex,295095:doAdd,[(424,335)(424,377)(340,377)(340,391)])
link(Data1,16427426:Part1,[])
link(Data2,6215852:Part1,[(398,320)(321,320)])
}
Add(GetIndexData,9643979,322,329)
{
link(onIndex,10133507:doIndex,[])
link(Data1,16427426:Part2,[(328,313)(398,313)])
link(Data2,6215852:Part2,[(335,306)(328,306)])
}
Add(For,10155560,266,329)
{
End=1
link(onEvent,9643979:doIndex,[])
}
Add(Hub,16097024,182,259)
{
link(onEvent1,12612380:doStr,[])
link(onEvent2,10155560:doFor,[(249,272)(249,335)])
}
Add(PlotPoints,15076439,280,77)
{
Grapher="MyPl"
Color=-16777201
link(ValueX,170921:Result,[(293,68)(272,68)(272,117)(230,117)])
}
Add(MathParse,170921,224,77)
{
DataCount=1
MathStr="%0*(-1)"
Default=10
link(onResult,15076439:doAdd,[])
}
Add(Hub,6935032,189,77)
{
link(onEvent1,2865317:doWork2,[])
link(onEvent2,2865317:doWork3,[(214,90)])
}
Add(HubEx,2865317,210,77)
{
link(onEvent,170921:doCalc,[])
}
Add(InfoTip,2302475,189,35)
{
Info=#19:Растяжка шкалы по Х|
Width=134
Height=88
}
Add(InfoTip,748212,119,133)
{
Info=#25:Спиралька для красоты :-)|
Width=281
Height=88
}
Add(InfoTip,3924085,119,224)
{
Info=#30:Отрисовка линии по двум точкам|31:Левая и правая кнопка при клике|
Width=330
Height=200
}

карма: 19

0
Ответов: 170
Рейтинг: 1
#4: 2025-10-13 16:58:18 ЛС | профиль | цитата
Леонид писал(а):
Andrej77rv, какие-то у вас хотелки странные
Хотелка

В чем странность? Прямая проходящая через две точки. Для чего надо я просто не объяснил..
карма: 1

0
Ответов: 990
Рейтинг: 207
#5: 2025-10-13 17:58:20 ЛС | профиль | цитата
Andrej77rv писал(а):
Прямая проходящая через две точки. Для чего надо я просто не объяснил..


Сначала ЛКМ на графике и только потом колёсико мышки.
Add(MainForm,7810842,35,175)
{
Width=1017
Height=586
WindowsState=2
link(onCreate,7675152:doEnum,[])
}
Add(Plotter,12892324,189,27)
{
Left=145
Width=856
Height=547
Align=5
Name="123"
GridX=20
GridY=20
MinH=-2
MaxH=2
MinW=-5
MaxW=5
Point(doMaxH)
Point(doMinH)
Point(onMouseWheel)
Point(doMaxW)
}
Add(PlotAxis,13638926,140,28)
{
Grapher="123"
Color=0
Style=2
}
Add(PlotAxis,8991717,91,28)
{
Grapher="123"
Color=0
Style=2
Angle=90
}
Add(PlotPoints,16350363,343,161)
{
Grapher="123"
Size=3
Name="1"
Shape=2
}
Add(PlotSeriesMarker,8960325,406,161)
{
Grapher="123"
TextList=#1:A|1:B|0:|
Series="1"
}
Add(StrList,4142208,77,133)
{
Strings=#5:-2;-1|7:0.5;1.6|
}
Add(ArrayEnum,7675152,91,189)
{
link(onItem,9776831:doEvent1,[])
link(onEndEnum,6517109:doCalc,[(144,202)(144,342)])
link(Array,4142208:Array,[])
}
Add(MT_String,3855692,196,175)
{
link(onResult,2267416:doString,[])
}
Add(FormatStr,2267416,245,175)
{
Mask="%2;%1"
link(onFString,587664:doMTString,[])
}
Add(MT_String,587664,294,161)
{
link(onResult,16350363:doAdd,[])
}
Add(PlotLines,3714785,539,336)
{
Grapher="123"
Color=0
}
Add(Hub,9776831,154,189)
{
link(onEvent1,3855692:doMTString,[])
link(onEvent2,558336:doEnum,[(179,202)(179,300)])
}
Add(MathParse,6517109,280,336)
{
DataCount=1
MathStr="(%1[2,0] - %1[2,1])/(%1[1,0] - %1[1,1])"
link(onResult,3611920:doCalc,[])
link(X1,15477018:Var2,[])
}
Add(Matrix,12054726,245,217)
{
MatrixType=1
Col=3
Row=2
}
Add(MatrixRW,3665733,245,287)
{
link(Matrix,12239791:Var2,[])
link(X,558336:NumSubStr,[(265,278)(237,278)(237,334)(202,334)])
link(Y,7675152:Index,[(272,271)(104,271)])
}
Add(Str_Enum,558336,196,294)
{
link(onEnum,3665733:doWrite,[])
}
Add(GetDataEx,12239791,245,252)
{
link(Data,12054726:Matrix,[])
}
Add(MathParse,3110279,413,336)
{
MathStr="%1 + 10*%2"
link(onResult,8990004:doAdd,[])
link(X2,5411505:Var1,[(426,327)(370,327)])
}
Add(MathParse,3611920,329,336)
{
@Hint=#15:Расчёт смещения|
MathStr="%2[2,0]-%1*%2[1,0] "
link(onResult,14633002:doEvent1,[])
link(X2,15477018:Var3,[(342,257)])
}
Add(GetDataEx,15477018,280,252)
{
Angle=3
link(Data,12239791:Var3,[])
}
Add(MT_Add,8990004,462,336)
{
Data=Integer(10)
link(onAdd,651521:doWork2,[])
}
Add(MathParse,7425083,413,406)
{
MathStr="%1 - 10*%2"
link(onResult,4322917:doAdd,[])
link(X2,5411505:Var3,[(426,389)])
}
Add(Hub,14633002,378,336)
{
link(onEvent1,3110279:doCalc,[])
link(onEvent2,7425083:doCalc,[(403,349)(403,412)])
}
Add(MT_Add,4322917,462,406)
{
Data=Integer(-10)
link(onAdd,651521:doWork3,[(515,412)])
}
Add(HubEx,651521,511,336)
{
link(onEvent,3714785:doAdd,[])
}
Add(GetDataEx,5411505,364,384)
{
Angle=3
link(Data,6517109:Result,[(286,389)])
}


Редактировалось 1 раз(а), последний 2025-10-13 17:58:36
карма: 20

0
Ответов: 2467
Рейтинг: 698
#6: 2025-10-14 11:55:11 ЛС | профиль | цитата
Особо не пользовался элементами группы Графопостроителя и вот глядя на ваши схемы, задался вопросом. А почему то что хочет Andrej77rv не реализовать на элементе PlotAxis (Ось на графике)?
Нужно найти угол между двумя точками и по полученному углу через одну из точек провести ось, что как я понял и нужно Andrej77rv.

Но тут возникает другой вопрос, а правильно ли работает элемент PlotAxis (Ось на графике)?
Вот тестовая схема:
Add(MainForm,7810842,231,154)
{
Width=1017
Height=586
WindowsState=2
}
Add(Plotter,12892324,497,160)
{
Left=145
Width=856
Height=547
Align=5
Name="123"
GridX=20
GridY=20
MinH=-2
MaxH=2
MinW=-5
MaxW=5
Point(doMaxH)
Point(doMinH)
Point(onMouseWheel)
Point(doMaxW)
}
Add(PlotAxis,13638926,385,161)
{
Grapher="123"
Color=0
Style=2
AddHint(-3,-36,30,13,Angle)
}
Add(PlotAxis,8991717,336,161)
{
Grapher="123"
Color=0
Style=2
Angle=90
AddHint(-12,-39,36,13,Angle)
}
Add(PlotAxis,10204635,441,161)
{
Grapher="123"
Style=2
Angle=-45
AddHint(-7,-35,39,13,Angle)
}
У меня ось под 45 градусов не проходит через заданную точку (0,0).
А вот в этой схеме уже проходит:

Add(MainForm,7810842,231,154)
{
Width=1017
Height=586
WindowsState=2
}
Add(PlotAxis,13638926,385,161)
{
Grapher="123"
Color=0
Style=2
AddHint(-3,-36,30,13,Angle)
}
Add(PlotAxis,8991717,336,161)
{
Grapher="123"
Color=0
Style=2
Angle=90
AddHint(-12,-39,36,13,Angle)
}
Add(PlotAxis,10204635,441,161)
{
Grapher="123"
Style=2
Angle=-45
AddHint(-7,-35,39,13,Angle)
}
Add(Plotter,12892324,497,160)
{
Left=145
Width=856
Height=547
Align=5
Name="123"
GridX=20
GridY=20
MinH=-5
MaxH=5
MinW=-5
MaxW=5
Point(doMaxH)
Point(doMinH)
Point(onMouseWheel)
Point(doMaxW)
}
Свойства MinH,MaxH изменил чтоб был центр. Выходит что ошибка в коде элемента.
А вот схема того что описывал вначале:
Add(MainForm,7810842,168,322)
{
Width=1017
Height=586
WindowsState=2
link(onCreate,2399555:doEvent1,[])
}
Add(Plotter,12892324,602,406)
{
Left=145
Width=856
Height=547
Align=5
Name="123"
GridX=20
GridY=20
MinH=-5
MaxH=5
MinW=-5
MaxW=5
Point(doMaxH)
Point(doMinH)
Point(onMouseWheel)
Point(doMaxW)
}
Add(PlotAxis,13638926,651,357)
{
Grapher="123"
Color=0
Style=2
}
Add(PlotAxis,8991717,602,357)
{
Grapher="123"
Color=0
Style=2
Angle=90
}
Add(MathParse,13579696,364,574)
{
DataCount=4
MathStr="atan(%2 - %4,%1 - %3)"
AngleMode=1
link(onResult,10204635:doAxis,[])
link(X1,5299679:getVar,[])
link(X2,10453107:getVar,[])
link(X3,6672955:getVar,[])
link(X4,10269594:getVar,[])
AddHint(-47,57,119,13,MathStr)
}
Add(Hub,2399555,273,336)
{
OutCount=3
link(onEvent1,15253879:doAdd,[])
link(onEvent2,16498704:doAdd,[(353,349)(353,426)])
link(onEvent3,13579696:doCalc,[(313,356)(313,580)])
}
Add(PlotAxis,10204635,448,574)
{
Grapher="123"
Color=65280
link(X,5898030:getVar,[])
link(Y,9569550:getVar,[])
}
Add(Memory,16239714,364,175)
{
Default=Real(-2)
AddHint(-8,-22,33,13,Default)
}
Add(LineBreakEx,10271506,364,224)
{
Caption="X1"
Type=3
link(_Data,16239714:Value,[])
}
Add(Memory,6934854,420,175)
{
Default=Real(-1)
AddHint(-8,-22,33,13,Default)
}
Add(LineBreakEx,15315072,420,224)
{
Caption="Y1"
Type=3
link(_Data,6934854:Value,[])
}
Add(Memory,6032807,546,168)
{
Default=Real(0.5)
AddHint(-8,-22,30,13,Default)
}
Add(LineBreakEx,16577660,546,217)
{
Caption="X2"
Type=3
link(_Data,6032807:Value,[])
}
Add(Memory,10039306,602,168)
{
Default=Real(1.6)
AddHint(-8,-22,30,13,Default)
}
Add(LineBreakEx,11831493,602,217)
{
Caption="Y2"
Type=3
link(_Data,10039306:Value,[])
}
Add(LineBreakEx,5898030,448,532)
{
Caption="X1"
Type=2
}
Add(LineBreakEx,9569550,455,546)
{
Caption="Y1"
Type=2
}
Add(LineBreakEx,5299679,364,497)
{
Caption="X1"
Type=2
}
Add(LineBreakEx,10453107,371,511)
{
Caption="Y1"
Type=2
}
Add(LineBreakEx,6672955,378,525)
{
Caption="X2"
Type=2
}
Add(LineBreakEx,10269594,385,539)
{
Caption="Y2"
Type=2
}
Add(PlotSeriesMarker,8960325,511,357)
{
Grapher="123"
TextList=#1:A|1:B|0:|
Series="1"
}
Add(PlotPoints,1610247,434,357)
{
Grapher="123"
Size=3
Name="1"
Shape=2
}
Add(LineBreakEx,5144845,371,308)
{
Caption="X1"
Type=2
}
Add(LineBreakEx,1212494,364,294)
{
Caption="Y1"
Type=2
}
Add(LineBreakEx,16298314,371,385)
{
Caption="X2"
Type=2
}
Add(LineBreakEx,10452409,364,371)
{
Caption="Y2"
Type=2
}
Add(MT_AddData,15253879,364,336)
{
link(onAdd,5481602:doWork1,[(410,342)])
link(Data1,1212494:getVar,[])
link(Data2,5144845:getVar,[])
}
Add(MT_AddData,16498704,364,420)
{
link(onAdd,5481602:doWork3,[(410,426)])
link(Data1,10452409:getVar,[])
link(Data2,16298314:getVar,[])
}
Add(HubEx,5481602,406,357)
{
link(onEvent,1610247:doAdd,[])
}
Две точки и ось проходящая через них. Если изменить свойства (MinH,MaxH), то ось "уползет". Что и показывает неправильную работу элемента PlotAxis при рисовании оси.

Редактировалось 2 раз(а), последний 2025-10-14 12:15:11
карма: 11

0
Ответов: 990
Рейтинг: 207
#7: 2025-10-14 12:46:58 ЛС | профиль | цитата
sla8a писал(а):
Нужно найти угол между двумя точками и по полученному углу через одну из точек провести ось, что как я понял и нужно Andrej77rv.

Так это первое что попробовали…
sla8a писал(а):
У меня ось под 45 градусов не проходит через заданную точку (0,0).

И также столкнулись с тем, что ось не проходит через указанную точку.
карма: 20

0
Ответов: 2467
Рейтинг: 698
#8: 2025-10-14 12:54:01 ЛС | профиль | цитата
Ошибка в коде получается с 69 по 75 строку:
endY := FX + startY; 
_x := Parent._prop_LeftMargin + Round(VSpace*((X + (Y - startY)*b) - startX)/FX);
_y := Parent._prop_TopMargin + HSpace;
MoveTo(_x, _y);
_x := Parent._prop_LeftMargin + Round(VSpace*((X + (Y - endY)*b) - startX)/FX);
_y := Parent._prop_TopMargin;
LineTo(_x, _y);
Неправильно высчитываются координаты оси.

Редактировалось 8 раз(а), последний 2025-10-14 13:14:46
карма: 11

0
Ответов: 8974
Рейтинг: 824
#9: 2025-10-15 10:31:01 ЛС | профиль | цитата
Ещё вариант, без мышки и осей, но с Edit
Вариант


Add(MainForm,2953706,133,112)
{
Left=300
Top=100
Width=701
Height=360
}
Add(Plotter,3420938,427,161)
{
Width=685
Height=321
Align=5
Name="MyPl"
MinH=-10
MaxH=10
LeftMargin=70
RightMargin=10
TopMargin=5
MouseControl=3
Point(Width)
Point(Height)
}
Add(PlotLines,7392247,378,161)
{
Grapher="MyPl"
MaxValues=720
link(ValueX,9503112:Var3,[(391,152)])
}
Add(Timer,13232622,133,161)
{
Interval=10
link(onTimer,8106150:doNext,[])
}
Add(Counter,8106150,175,161)
{
Max=1215752191
link(onNext,3619606:doEvent1,[])
}
Add(MathParse,988847,266,161)
{
DataCount=1
MathStr="sin(%1*1.03)*8 - sin(%1*16)"
AngleMode=1
link(onResult,6322979:doCalc,[])
}
Add(MathParse,6322979,315,161)
{
DataCount=1
MathStr="cos(%1*1.03)*8 + cos(%1*16)"
AngleMode=1
link(onResult,7392247:doAdd,[])
link(X1,9503112:Var2,[])
}
Add(PlotLines,295095,329,385)
{
Grapher="MyPl"
Color=16711680
MaxValues=2
link(ValueY,15282760:Var,[(335,369)(286,369)])
link(ValueX,7891976:Var,[(342,369)(349,369)])
}
Add(GetDataEx,9503112,315,147)
{
Angle=3
link(Data,8106150:Count,[(307,152)(307,201)(181,201)])
}
Add(Hub,3619606,217,161)
{
link(onEvent1,988847:doCalc,[])
link(onEvent2,9723856:doCalc,[(242,174)(242,279)])
}
Add(Edit,13888985,336,217)
{
Left=20
Top=5
Width=30
Text="300"
}
Add(Edit,13073051,252,217)
{
Left=20
Top=30
Width=30
Text="8"
}
Add(Edit,1316952,378,217)
{
Left=20
Top=60
Width=30
Text="-80"
}
Add(Edit,5984975,294,217)
{
Left=20
Top=85
Width=30
Text="-8"
}
Add(Label,4277236,427,217)
{
Left=1
Top=10
Width=20
Height=95
Caption="X1\r\n\r\nY1\r\n\r\ndX\r\n\r\nY2"
AutoSize=1
}
Add(GetIndexData,15282760,280,329)
{
link(onIndex,7891976:doIndex,[])
link(Data1,13073051:Text,[(286,258)(258,258)])
link(Data2,5984975:Text,[(293,257)(300,257)])
}
Add(GetIndexData,7891976,343,329)
{
link(onIndex,295095:doAdd,[(382,335)(382,377)(319,377)(319,391)])
link(Data1,9723856:Result,[(349,313)(335,313)])
link(Data2,6332316:Result,[(356,313)(377,313)])
}
Add(For,1632207,231,329)
{
End=1
link(onEvent,15282760:doIndex,[])
}
Add(MathParse,9723856,329,273)
{
MathStr="%1 -720 + %2"
link(onResult,6332316:doCalc,[])
link(X2,13888985:Text,[])
}
Add(MathParse,6332316,371,273)
{
link(onResult,1632207:doFor,[(410,279)(410,321)(221,321)(221,335)])
link(X2,1316952:Text,[])
}

карма: 19

0
9
Сообщение
...
Прикрепленные файлы
(файлы не залиты)