Вверх ↑
Этот топик читают: Гость
Ответов: 2236
Рейтинг: 676
#16: 2020-06-25 21:54:10 ЛС | профиль | цитата
Gitarist писал(а):
от такой вид
Мы ему тут помогаем, а он нам картинки неприличные выкладывает
По теме, не все так страшно как описал Леонид. Вам достаточно найти центр окружности. Смотрите картинку. У вас уже сразу есть данные для Point3 и Point4 это ваши координаты начало дуги (А) и конец дуги (B). Найдя центр, вы получите Point1 (вычесть из позиции центра по Х и Y радиус) и Point2 (добавить к центру по оси Х и Y радиус (R)).


Редактировалось 1 раз(а), последний 2020-06-25 21:56:22
карма: 11

0
Ответов: 106
Рейтинг: 0
#17: 2020-06-26 10:03:21 ЛС | профиль | цитата
sla8a писал(а):
Мы ему тут помогаем, а он нам картинки неприличные выкладывает

Дауж, эдакое математическое порно!))
sla8a писал(а):
По теме, не все так страшно как описал Леонид. Вам достаточно найти центр окружности. Смотрите картинку. У вас уже сразу есть данные для Point3 и Point4 это ваши координаты начало дуги (А) и конец дуги (B). Найдя центр, вы получите Point1 (вычесть из позиции центра по Х и Y радиус) и Point2 (добавить к центру по оси Х и Y радиус (R)).

Но g-код меняется при таком рисунке, насколько я понял, что если дуга разворачивается больше чем на 180 градусов, в код вставляются 2 дуги и одна берет начало из конца другой.

карма: 0

0
Ответов: 2236
Рейтинг: 676
#18: 2020-06-26 10:11:11 ЛС | профиль | цитата
Gitarist писал(а):
в код вставляются 2 дуги и одна берет начало из конца другой.
А что это меняет? Ну будет разбита дуга хоть на шесть. Все равно будет позиция начала дуги, позиция конца дуги, направление и радиус. Ищите центр и все на этом.
карма: 11

0
Ответов: 106
Рейтинг: 0
#19: 2020-06-26 10:41:49 ЛС | профиль | цитата
sla8a писал(а):
Ищите центр

Не знаю как.
Капец... Ну неужели нельзя было сделать такой компонент, чтобы я указал точку начала, точку конца дуги и ее радиус...
Зачем эти семь кругов ада: левый верхний угол, правый нижний, начало дуги, конец, надо найти центр, или рисовать через синусы косинусы.. бред какой то... устать..нипанимать...
карма: 0

0
Ответов: 2236
Рейтинг: 676
#20: 2020-06-26 11:37:53 ЛС | профиль | цитата
Gitarist писал(а):
Не знаю как
Скорее всего вы бы потратили не больше пяти минут чтоб найти готовое решение (формулы) в интернете. Жаль что у вас нет доступа к интернету. Очень хорошее изобретение, рекомендую пользоваться.
Gitarist писал(а):
Ну неужели нельзя было сделать такой компонент
Делать такой компонент дольше, чем вам сделать нужные вычисления.

Редактировалось 4 раз(а), последний 2020-06-26 11:49:47
карма: 11

0
Ответов: 8921
Рейтинг: 823
#21: 2020-06-26 13:47:31 ЛС | профиль | цитата
Gitarist писал(а):
Пожалуй, пойду лучше выйду в окно

Вчера пришлось часа три истратить, лишь бы в окно не вышел
CirclePart.jpg
https://forum.hiasm.com/getfile/39041
Как следует не проверял, проверьте на ошибки и неточности Выложил в архиве из-за формул с "<" ">", их форум не признаёт
карма: 19

1
Голосовали:Gitarist
Ответов: 494
Рейтинг: 163
#22: 2020-06-26 14:41:58 ЛС | профиль | цитата
Леонид писал(а):
Как следует не проверял

Леонид, при введёных данных как в ТС начальная точка 100;100 конечная 200;100 радиус 50 - не работает рад1-рад2 , всегда "вогнутая".
карма: 4

0
Ответов: 106
Рейтинг: 0
#23: 2020-06-26 14:46:34 ЛС | профиль | цитата
Леонид писал(а):
Вчера пришлось часа три истратить, лишь бы в окно не вышел

Леонид, Вы - человек с большой буквы! Огромное Вам спасибо за труд! Столько сложных математических вычислений...
это ж сума сойти можно...)
Мне так неловко что отнял у Вас много свободного времени, ведь я никто для Вас, просто человек из инета... Как я могу Вас благодарить?

Это всё так контрастирует на фоне этой фразы:
sla8a писал(а):
Скорее всего вы бы потратили не больше пяти минут чтоб найти готовое решение (формулы) в интернете. Жаль что у вас нет доступа к интернету. Очень хорошее изобретение, рекомендую пользоваться.

Ведь это так легко, просто послать в инет... Иди, мол, ищи, там чо-та есть...

--- Добавлено в 2020-06-26 15:45:19

tig-rrr писал(а):
Леонид, при введёных данных как в ТС начальная точка 100;100 конечная 200;100 радиус 50 - не работает рад1-рад2 , всегда "вогнутая".

Эт вроде костыльным методом решаемо Ерунда))) Основная работа сделана.

Костыль

Редактировалось 1 раз(а), последний 2020-06-26 15:45:19
карма: 0

0
Ответов: 8921
Рейтинг: 823
#24: 2020-06-26 16:43:07 ЛС | профиль | цитата
tig-rrr, при ваших вводных оба центра слились в один. А в одну сторону -- это ТС не пояснил, что значит "по часовой" и зачем.
Кроме выбора одного из двух центров, надо кнопочку выбора сделать -- по какую сторону от хорды рисовать окружность
карма: 19

0
Ответов: 494
Рейтинг: 163
#25: 2020-06-26 16:45:34 ЛС | профиль | цитата
Леонид писал(а):
лишь бы в окно не вышел

Леонид писал(а):
надо кнопочку выбора сделать

Благодоря Леонид свои 5 копеек...
https://forum.hiasm.com/getfile/39044

Редактировалось 2 раз(а), последний 2020-06-26 17:53:48
карма: 4

0
Ответов: 2059
Рейтинг: 132
#26: 2020-06-26 17:09:25 ЛС | профиль | цитата
по какую сторону от хорды рисовать окружность

А какая разница!?
А что такое хорда?
карма: 6

0
Ответов: 2236
Рейтинг: 676
#27: 2020-06-26 23:32:59 ЛС | профиль | цитата
Gitarist писал(а):
Это всё так контрастирует на фоне этой фразы:
Да согласен контраст большой. Один хотел чтоб вы научились думать самостоятельно, второй лишил вас этого. Это задача не из разряда высшей математики, это входит в базу среднего образования. Не так страшно что забыл, плохо что нет желания вспомнить.
sla8a писал(а):
потратили не больше пяти минут
Дабы не быть голословным:
1. Вводим в поисковик: "позиция центра окружности по двум точкам и радиусу".
2. На первой странице получаем ответ: https://www.cyberforum.ru/vba/thread1796207.html.
3. Все необходимое и рисунок и расчеты:
4. Вставляем в схему. Вот если на этом этапе возникли вопросы, тогда и понадобилась бы помощь форума.

Схема


Add(MainForm,16297664,77,336)
{
Width=687
Height=541
Position=1
}
Add(Img_Arc,8255685,427,497)
{
Point2AsOffset=0
Size=3
Point(Point1)
Point(Point2)
Point(Point3)
Point(Point4)
Point(doDirection)
link(onDraw,15251476:doDraw,[])
link(Bitmap,11805101:getVar,[(433,479)(391,479)])
link(Point1,4619322:Var2,[])
link(Point2,7960578:Var2,[])
link(Point3,2063720:Point,[])
link(Point4,12049784:Point,[])
}
Add(PaintBox,880944,308,224)
{
Left=40
Top=110
Width=600
Height=300
Color=16777215
ClearBeforeDraw=0
link(onBeforeDraw,9230487:doCalc,[])
}
Add(Edit,5113297,77,224)
{
Left=45
Top=45
Text="100"
link(onChange,8919054:doWork2,[])
}
Add(Edit,9314071,119,238)
{
Left=120
Top=45
Text="100"
link(onChange,12839978:doWork2,[])
}
Add(Edit,6904018,161,252)
{
Left=245
Top=45
Text="200"
link(onChange,528179:doWork2,[])
}
Add(Edit,13102730,203,266)
{
Left=315
Top=45
Text="100"
link(onChange,13288155:doWork2,[])
}
Add(PointXY,2063720,455,371)
{
link(X,3300599:getVar,[])
link(Y,15005020:getVar,[])
}
Add(HubEx,8919054,280,224)
{
link(onEvent,880944:doRefresh,[])
}
Add(HubEx,12839978,280,238)
{
Angle=3
link(onEvent,8919054:doWork3,[])
}
Add(HubEx,528179,280,252)
{
Angle=3
link(onEvent,12839978:doWork3,[])
}
Add(HubEx,13288155,280,266)
{
Angle=3
link(onEvent,528179:doWork3,[])
}
Add(Img_Rectangle,15251476,497,497)
{
Point2AsOffset=0
LineStyle=2
Point(Point1)
Point(Point2)
link(onDraw,14977473:doDraw,[])
link(Bitmap,3596754:getVar,[])
link(Point1,4619322:Var3,[(517,485)])
link(Point2,7960578:Var3,[(524,466)])
}
Add(Edit,16653976,245,280)
{
Left=434
Top=44
Text="60"
link(onChange,13288155:doWork3,[(284,286)])
}
Add(Img_Point,3910897,595,497)
{
Color=32768
Size=3
Point(X)
Point(Y)
link(onDraw,7167075:doDraw,[])
link(Bitmap,7743151:getVar,[])
link(X,10233706:getVar,[])
link(Y,15162992:getVar,[])
}
Add(Img_Point,7167075,651,497)
{
Color=255
Size=3
Point(X)
Point(Y)
link(Bitmap,11860968:getVar,[])
link(X,13983617:getVar,[])
link(Y,1759900:getVar,[])
}
Add(PointXY,12049784,462,448)
{
link(X,7833215:getVar,[])
link(Y,2165680:getVar,[])
}
Add(Img_Point,14977473,546,497)
{
Color=8388736
Size=3
Point(X)
Point(Y)
link(onDraw,3910897:doDraw,[])
link(Bitmap,10981796:getVar,[])
link(X,6463125:Var2,[])
link(Y,1453321:Var1,[(566,278)])
}
Add(MathParse,13714762,490,224)
{
MathStr="sqrt(sqr(%2) - sqr(%1 / 2))"
link(onResult,7520816:doCalc,[])
link(X1,16356677:Var2,[])
link(X2,13202318:getVar,[])
}
Add(MathParse,7520816,553,224)
{
DataCount=6
MathStr="%1 + (%2 - %1)/2 + %5 * (%4 - %3) / %6"
Point(doMathStr)
link(onResult,9757581:doCalc,[])
link(X1,7118581:getVar,[])
link(X2,5412053:getVar,[])
link(X3,299756:getVar,[])
link(X4,4213986:getVar,[])
link(X5,13217560:Var2,[])
link(X6,6056137:Var2,[])
}
Add(MathParse,9757581,623,224)
{
DataCount=6
MathStr="%3 + (%4 - %3)/2 - %5 * (%2 - %1) / %6"
Point(doMathStr)
link(onResult,8513123:doOperation,[])
link(X1,2347075:getVar,[])
link(X2,2234635:getVar,[])
link(X3,13282408:getVar,[])
link(X4,8594046:getVar,[])
link(X5,13217560:Var3,[(657,205)])
link(X6,6056137:Var3,[(664,212)])
}
Add(LineBreakEx,6567920,77,273)
{
Caption="x1"
Type=3
link(_Data,5113297:Text,[])
}
Add(LineBreakEx,14106423,161,301)
{
Caption="x2"
Type=3
link(_Data,6904018:Text,[])
}
Add(LineBreakEx,3615278,119,287)
{
Caption="y1"
Type=3
link(_Data,9314071:Text,[])
}
Add(LineBreakEx,12513766,203,308)
{
Caption="y2"
Type=3
link(_Data,13102730:Text,[])
}
Add(LineBreakEx,285935,245,322)
{
Caption="r"
Type=3
link(_Data,16653976:Text,[])
}
Add(LineBreakEx,3300599,455,329)
{
Caption="x1"
Type=2
}
Add(LineBreakEx,7833215,462,406)
{
Caption="x2"
Type=2
}
Add(LineBreakEx,15005020,462,343)
{
Caption="y1"
Type=2
}
Add(LineBreakEx,2165680,469,420)
{
Caption="y2"
Type=2
}
Add(LineBreakEx,10233706,602,455)
{
Caption="x1"
Type=2
}
Add(LineBreakEx,15162992,609,469)
{
Caption="y1"
Type=2
}
Add(LineBreakEx,13983617,658,455)
{
Caption="x2"
Type=2
}
Add(LineBreakEx,1759900,665,469)
{
Caption="y2"
Type=2
}
Add(LineBreakEx,7118581,553,140)
{
Caption="x1"
Type=2
}
Add(LineBreakEx,5412053,560,154)
{
Caption="x2"
Type=2
}
Add(LineBreakEx,299756,567,168)
{
Caption="y1"
Type=2
}
Add(LineBreakEx,4213986,574,182)
{
Caption="y2"
Type=2
}
Add(LineBreakEx,2347075,623,140)
{
Caption="x1"
Type=2
}
Add(LineBreakEx,2234635,630,154)
{
Caption="x2"
Type=2
}
Add(LineBreakEx,13282408,637,168)
{
Caption="y1"
Type=2
}
Add(LineBreakEx,8594046,644,182)
{
Caption="y2"
Type=2
}
Add(GetDataEx,13217560,581,200)
{
Angle=3
link(Data,13714762:Result,[(540,205)(540,268)(496,268)])
}
Add(GetDataEx,4619322,441,480)
{
Angle=3
link(Data,14588321:Point,[(438,485)(438,314)(706,314)])
}
Add(GetDataEx,7960578,448,461)
{
Angle=3
link(Data,12541359:Point,[(445,466)(445,323)(790,323)])
}
Add(PointXY,12541359,784,273)
{
link(X,10044231:Var2,[])
link(Y,10044231:Var3,[(797,264)])
}
Add(Math,1796089,784,224)
{
OpType=2
Op2=2
link(onResult,8255685:doDraw,[(838,230)(838,538)(417,538)(417,503)])
link(Op1,15610399:getVar,[])
}
Add(LineBreakEx,15610399,784,196)
{
Caption="r"
Type=2
}
Add(Math,8513123,700,224)
{
OpType=1
Op2=2
link(onResult,7698133:doOperation,[])
link(Op1,6463125:Var3,[(706,203)(684,203)(684,271)])
link(Op2,5121774:getVar,[])
}
Add(GetDataEx,10044231,784,259)
{
link(Data,1796089:Result,[])
}
Add(PointXY,14588321,700,273)
{
link(X,8513123:Result,[])
link(Y,7698133:Result,[(713,265)(748,265)])
}
Add(Math,7698133,742,224)
{
OpType=1
Op2=2
link(onResult,1796089:doOperation,[])
link(Op1,1453321:Var3,[(748,190)(692,190)(692,278)])
link(Op2,10779681:getVar,[])
}
Add(LineBreakEx,10779681,749,196)
{
Caption="r"
Type=2
}
Add(LineBreakEx,5121774,707,196)
{
Caption="r"
Type=2
}
Add(GetDataEx,6463125,553,266)
{
link(Data,7520816:Result,[])
}
Add(GetDataEx,1453321,623,273)
{
link(Data,9757581:Result,[])
}
Add(MathParse,9230487,350,224)
{
DataCount=4
MathStr="sqrt((%1-%2) * (%1-%2) + (%3-%4) * (%3-%4))"
link(onResult,13272551:doOperation,[])
link(X1,11566714:getVar,[])
link(X2,2880125:getVar,[])
link(X3,4691825:getVar,[])
link(X4,6505638:getVar,[])
}
Add(LineBreakEx,11566714,350,126)
{
Caption="x1"
Type=2
}
Add(LineBreakEx,2880125,357,140)
{
Caption="x2"
Type=2
}
Add(LineBreakEx,4691825,364,154)
{
Caption="y1"
Type=2
}
Add(LineBreakEx,6505638,371,168)
{
Caption="y2"
Type=2
}
Add(LineBreakEx,13202318,497,189)
{
Caption="r"
Type=2
}
Add(LineBreakEx,11860968,651,441)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,7743151,595,441)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,10981796,546,455)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,3596754,497,448)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,11805101,385,448)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,7314358,308,266)
{
Caption="bmp"
Type=3
link(_Data,880944:Bitmap,[])
}
Add(If_else,16004022,441,224)
{
Type=4
link(onTrue,13714762:doCalc,[])
link(onFalse,5840770:doDraw,[(479,237)(479,153)])
link(Op2,6253326:Var2,[])
}
Add(LineBreakEx,3442907,399,196)
{
Caption="r"
Type=2
}
Add(Math,13272551,399,224)
{
OpType=2
Op2=2
link(onResult,16004022:doCompare,[])
link(Op1,3442907:getVar,[])
AddHint(23,-50,30,13,Op2)
}
Add(LineBreakEx,11565827,497,119)
{
Caption="bmp"
Type=2
}
Add(Img_TextInRect,5840770,497,147)
{
Point1=65537
Point2=19661400
Font=[MS Sans Serif,14,1,0,1]
Text="Радиус меньше половины расстояния"
AlignHorizon=2
Alignvertical=2
link(Bitmap,11565827:getVar,[])
}
Add(CheckBox,15798334,210,77)
{
Left=500
Top=45
Width=80
Caption="pos1 / pos2"
link(onCheck,16584810:doEvent1,[])
}
Add(StrList,9664319,455,49)
{
Strings=#77:%1 + (%2 - %1)/2 + %5 * (%4 - %3) / %6|%3 + (%4 - %3)/2 - %5 * (%2 - %1) / %6|77:%1 + (%2 - %1)/2 - %5 * (%4 - %3) / %6|%3 + (%4 - %3)/2 + %5 * (%2 - %1) / %6|
Point(doGetString)
Point(onGetString)
link(onGetString,2902760:doSplit,[])
}
Add(StrPart,2902760,497,56)
{
Char="|"
link(onSplit,9757581:doMathStr,[(617,62)(617,237)])
link(onPart,7520816:doMathStr,[(545,69)(545,237)])
}
Add(Hub,16584810,252,77)
{
link(onEvent1,9664319:doGetString,[])
link(onEvent2,7489636:doWork1,[(284,90)])
}
Add(CheckBox,4312292,210,126)
{
Left=595
Top=45
Caption="<-- / -->"
link(onCheck,2043590:doEvent1,[])
}
Add(Hub,2043590,252,126)
{
link(onEvent1,8255685:doDirection,[(297,132)(297,510)])
link(onEvent2,7489636:doWork2,[])
}
Add(HubEx,7489636,280,133)
{
Angle=1
link(onEvent,8919054:doWork1,[])
}
Add(GetDataEx,6253326,448,207)
{
Angle=3
link(Data,9230487:Result,[(436,212)(436,272)(356,272)])
}
Add(GetDataEx,16356677,490,207)
{
Angle=3
link(Data,6253326:Var3,[])
}
Add(GetDataEx,6056137,588,207)
{
Angle=3
link(Data,16356677:Var3,[])
}

Gitarist, сильно сложно было найти нужную информацию? Сравните схемы.

tig-rrr, у Леонида был другой способ отрисовки дуги по точкам, в вашей схеме явный перебор.

Редактировалось 32 раз(а), последний 2020-06-30 16:46:29
карма: 11

0
Ответов: 494
Рейтинг: 163
#28: 2020-06-27 13:00:50 ЛС | профиль | цитата
sla8a,
sla8a писал(а):
у Леонида был другой способ отрисовки дуги по точкам,
конечно же я заметил это когда скачал Ваш вариант!.
sla8a писал(а):
в вашей схеме явный перебор.
С этим не поспоришь - это так всегда, этим и отличаются обычные юзеры как я от профи...

Редактировалось 2 раз(а), последний 2020-06-27 13:05:44
карма: 4

0
Ответов: 2236
Рейтинг: 676
#29: 2020-06-27 14:18:58 ЛС | профиль | цитата
tig-rrr,
flood

tig-rrr писал(а):
профи
Хорошая шутка
Какие прогнозы на 09.08?
карма: 11

0
Ответов: 106
Рейтинг: 0
#30: 2020-06-30 09:51:40 ЛС | профиль | цитата
sla8a писал(а):
Схема: Архив zip (Залил на сторонний файлообмен, так как не смог вставить схему и загрузить архив (загружает но он 0kb).

Антивирус просто в шоке. Ладно, отключил... Даже просто хром отказывается качать, говорит, вирус))
2312312312.png

Редактировалось 1 раз(а), последний 2020-06-30 09:52:09
карма: 0

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