Render.ru

for Arkady

#1
так понял, что ты в этом больше разбираешься--как перенести вершину кривой по направляющей на заданную величину
 
#3
извини, не понял термина, возможно,.э.. попробую популярно--из этой точки выходит луч и по этому лучу нужно сделать смещение,
указать сразу угол этого луча не могу, на прикладном уровня могу создать guidlines под нужным мне углом и посмотреть потом какой получился угол, но мне честно говоря он и не нужен может это нужно для процедуры???
 
#4
>> из этой точки выходит луч и по этому лучу нужно сделать смещение…
луч может выходить в любом направлении. Тангента (касательная в точке, см. илл. http://aew.com.ru:8100/editorial/e027/ed_elastic.phtml ) — только в двух.
Направления тангент можно получить [в начальной и конечной точках сегмента] у соотвествующего сегмента (объект segment) — свойства EndingControlPointAngle и StartingControlPointAngle.
Осталось только, пользуясь синусами и косинусами, рассчитать необходимое смещение — св-ва PositionX и PositionY соотвествующих вершин (объект Node; применительно к сегменту — его св-ва StartNode и EndNode).

А вот теперь новость похуже — в CorelVBA нет возможности определить выбранный (selected) узел или сегмент. Т.е. ср-вами VBA задача может быть решена несколько, кхе-кхе… ректальным путем, т.е. через ж…пу.
 
#5
Вот примерчик, для первого узла кривой:

Sub main()
Dim s As Shape
Set s = ActiveShape
If s.Type = cdrCurveShape Then
MsgBox (Str$(s.Curve.Segments.Item(1).StartingControlPointAngle))
End If
End Sub

В ответе будет угол тангенты этого узла.

Нижеследующий фрагмент смещает тот же узел на 46 мм в направлении тангенты этого узла (аргумент для тригнометрич. функций — в радианах!):

Sub main()
Dim s As Shape
Dim a, dx, dy, dL, x, y As Double
ActiveDocument.Unit = cdrMillimeter
Set s = ActiveShape
If s.Type = cdrCurveShape Then
a = s.Curve.Segments.Item(1).StartingControlPointAngle * 1.74532925199433E-02
End If

dL = 46
dx = dL * Cos(a)
dy = dL * Sin(a)

s.Curve.Segments.Item(1).StartNode.PositionX = dx + s.Curve.Segments.Item(1).StartNode.PositionX
s.Curve.Segments.Item(1).StartNode.PositionY = dy + s.Curve.Segments.Item(1).StartNode.PositionY


End Sub
 
#6
а как же действует макос, который позволяет смещать точку в нужном аправлении по иксу и игреку? http://www.clifton89.freeserve.co.uk/progs/NodeShuffler2.zip
 
#7
Не знаю, как MacOS, а тот макрос действует через .Curve.Selection , который [метод] возвращает nodeRange ВЫДЕЛЕННЫХ ШЕЙПЕРОМ вершин.
 
#8
Задача.VBA.Даны два однотипных вектора.Получить их скалярное произведение. ПОЖАЛУЙСТА...РЕШИТЬ НАДО...БУДУ ЧЕНЬ БЛАГОДАРНА.......
 
Сверху