Цель-C: Как рассчитать координаты x / y заданного расстояния для двух разных размеров окружности, внутри друг друга? - PullRequest
1 голос
/ 09 октября 2011

iPhone SDK и Objective-C

Цель:

Я пытаюсь вычислить координаты 'x' и 'y' двух окружностей.У меня есть размеры внутреннего круга, и я хочу вычислить, каковы были бы координаты 'x' и 'y' большей окружности внешнего круга, чтобы соответствовать той же ширине (расстоянию) вдоль края большего круга, как это происходит с внутренним кругом.

В конце мне просто нужно выяснить, какими будут ребра x / y для края больших окружностей.Так что он совпадает с внутренним меньшим кругом.Если ширина на внутреннем круге равна 10, мне нужно знать точки x / y, чтобы сделать его на 10 градусов выше, чем на большой круг.Чтобы сделать прямоугольник, который будет расширяться.Перпендикулярные линии.

Пример:

Я использую следующее, чтобы вычислить первые 2 набора x / y для дуги на внутренней окружности для построения точек:

- (CGPoint)coordinatePoints:(CGFloat)radius angleDegrees:(CGFloat)degrees xAxis:(CGFloat)x yAxis:(CGFloat)y {
    CGFloat pointX = (CGFloat) ((radius * cos((degrees * M_PI) / 180.0f)) + x);
    CGFloat pointY = (CGFloat) ((radius * sin((degrees * M_PI) / 180.0f)) + y);
    CGPoint points = CGPointMake(pointX, pointY);

    return points;
}

Я называю это для первых двух позиций на внутреннем круге.Мне нужно выяснить, как сделать так, чтобы у него было расстояние на внешнем круге.

CGPoint innerPoints1 = [self coordinatePoints:innerRadius angleDegrees:startingPoint xAxis:x yAxis:y];
CGPoint innerPoints2 = [self coordinatePoints:innerRadius angleDegrees:endingPoint xAxis:x yAxis:y];

Если радиус внутреннего круга равен 200, а радиус внешнего круга равен 500, я хочу, чтобы он все еще былтакой же толщины от внутреннего круга до большего внешнего круга, когда я строю точки.

// I have these calculated.
CGContextMoveToPoint(context, innerPoints1.x, innerPoints1.y);
CGContextAddLineToPoint(context, innerPoints2.x, innerPoints2.y);

// I need to find the solution for making innerPoints3 and innerPoints4 correctly.
CGContextAddLineToPoint(context, innerPoints3.x, innerPoints3.y);
CGContextAddLineToPoint(context, innerPoints4.x, innerPoints4.y);

У меня есть координаты для линий внутреннего круга для разнесенных точек x / y.Мне нужно найти правильный способ получить ту же ширину, нанесенную для больших кругов.Размеры круга всегда будут меняться.Длины линий будут динамическими.Поскольку я пытаюсь создать многоугольник, мне нужно найти 2 координаты на больших кругах для каждого сегмента.

Любая помощь с этим будет принята с благодарностью.

Информационная графика: исчерпывающая иллюстрированная справка Страница 74: Моя конечная цель в том, чтобы показать тот же результат, что и на трех изображениях.

1 Ответ

0 голосов
/ 10 октября 2011

Если спицы не слишком толстые, то длина дуги является хорошим приближением к ширине спицы:

Итак, сначала вы строите свои 2 внутренние точки с двумя углами (a1 и a2), центрированными вокруг основного угла спицы (a). Затем вы вычисляете расстояние D между этими точками (или аппроксимируете его R1 * (a2-a1))

Затем вы берете точки на внешнем круге со значениями угла, центрированными вокруг одного и того же основного угла спицы: a-0,5 * D / R2 и + 0,5 * D / R2. Эти точки будут на расстоянии D (измерено по дуге)

...