Я создал лепестковую диаграмму с тремя осями и хотел бы, чтобы все линии на графике были изогнутыми, а не прямыми. Я не нашел удовлетворительного способа согнуть все пути (то есть края треугольников) таким образом, чтобы они выглядели однородными. Я, конечно, могу использовать инструмент изменения формы, но тогда степень искривления каждой линии выглядит просто случайной. Инструмент искажения конверта выглядит многообещающе, но он также изменяет положение углов (якорей) моего графика, что явно неприемлемо. Есть ли способ добиться этого простым и воспроизводимым способом? (Мне нужно создать несколько графиков, которые должны быть сопоставимы).
обратите внимание, что я не пытаюсь (обязательно) создавать идеальные круги, как показано на изображении ниже. Цель скорее состоит в том, чтобы перейти от прямых линий к (слегка) изогнутым.
вот как мой график выглядит прямо сейчас: и примерно так я хочу, чтобы он выглядел:
Благодарность
Вот совсем другое решение. На основании ваших комментариев, которые вы должны отредактировать в вопросе.
#target illustrator
// jooBloat.jsx
//
// Copyright (c) 2015 Janne Ojala
// License: http://opensource.org/licenses/MIT
main();
function main(){
handlePaths(activeDocument.selection);
}
function bloatPoint(path, amount) {
var pts = path.pathPoints;
for(var i = 0; i < pts.length; i++){
var pos_prev = pts[(pts.length+i-1)%pts.length].anchor;
var pos = pts[i].anchor;
var pos_next = pts[(i+1)%pts.length].anchor;
pts[i].pointType = PointType.SMOOTH;
pts[i].rightDirection = add(pos,smul(0.33,sub(pos_next, pos_prev)));
pts[i].leftDirection = add(pos,smul(0.33,sub(pos_prev,pos_next)));
}
}
function sub(a, b){
arr=Array(2);
arr[0]=a[0]-b[0];
arr[1]=a[1]-b[1];
return arr;
}
function add(a, b){
arr=Array(2);
arr[0]=a[0]+b[0];
arr[1]=a[1]+b[1];
return arr;
}
function smul(a, b){
arr=Array(2);
arr[0]=a*b[0];
arr[1]=a*b[1];
return arr;
}
function handlePaths(sel) {
for(var i = 0; i < sel.length; i++){
if(sel[i].typename == "PathItem"){
bloatPoint(sel[i]);
}
}
}
Выберите любое количество закрытых путей и выполните скрипт. Результат:
Изображение 1 : До и после запуска скрипта на треугольниках.
Как вписать треугольник в 3 точки описано в этом посте
Изображение 2 : Трехточечная дуга
Так что получается, что вы можете использовать несколько свойств кругов, линий и треугольников. Вы всегда можете сформировать круг, который достигает 2 точек, нарисовав> центр круга на средней точке нормали соединительной линии. Вы можете > найти середину, нарисовав любые круги, которые пересекаются друг с другом. Они пересекают центр, поэтому, если вы соедините пересечения, вы получите нормаль к центру. Теперь, поскольку 3 точки должны удовлетворять двум из них, ЕДИНСТВЕННЫЙ > центр кругов находится на пересечении двух нормалей.
Существует сценарий Хириоки Сато под названием «circlecircle» , который делает это немного быстрее, чем рисование линий вручную.
5 баллов