2014-09-15 3 views
3

У меня есть точка, следующая по пути круга, и в определенное время я хочу, чтобы эта точка «сломалась» и прошла вдоль касательной линии. Как это найти? Я сказал, что производнаяПолучение линии для перемещения по касательной линии окружности в обработке

х = -sin (время)

и

у = -sin (время)

(не конечно, если я пойму «временную» часть того, что мне сказали), но я не понимаю, как этого достаточно, чтобы понять, что мне нужно путешествовать по этой линии. Какие-нибудь советы? Вот что я имею в настоящее время.

/* 
Rotor draws circle for random period of time, then moves 
in a straight direction for a random period of time, beginning a 
new circle 
*/ 

Rotor r; 
float timer = 0; 
boolean freeze = false; 

void setup() { 
    size(1000, 600); 
    smooth(); 
    noFill(); 
    frameRate(60); 
    background(255); 

    timeLimit(); 
    r = new Rotor(100, 100, random(40, 100)); 
} 

void draw() { 
    timer = timer + frameRate/1000; 

    if(timer > timeLimit()) { 
    timer = 0; 
    timeLimit(); 

    if(freeze == true) { 
     freeze = false; 
    } else { 
     freeze = true; 
    } 
    } 

    if(!freeze) { 
    r.drawRotor(); 
    } else { 
    r.holdSteady(); 
    } 
} 

float timeLimit() { 
    float timeLimit = random(100); 
    return timeLimit; 
} 

ротора Класс:

class Rotor { 

    color c; 
    int thickness; 
    float xPoint; 
    float yPoint; 
    float nXPoint; 
    float nYPoint; 
    float radius; 
    float angle = 0; 
    float centerX; 
    float centerY; 
    float pointSpeed = frameRate/100; 

    Rotor(float cX, float cY, float rad) { 
    c = color(0); 
    thickness = 1; 

    stroke(c); 
    strokeWeight(thickness); 

    centerX = cX; 
    centerY = cY; 
    radius = rad; 
    } 

    void drawRotor() { 
    angle = angle + pointSpeed; 
    xPoint = centerX + cos(angle) * radius; 
    yPoint = centerY + sin(angle) * radius; 
    ellipse(xPoint, yPoint, thickness, thickness); 
    strokeWeight(2); 
    ellipse(centerX, centerY, 5, 5); 
    } 

    void holdSteady() { 
    xPoint = -sin(angle);//need tangent of circle 
    yPoint = -cos(angle); 
    ellipse(xPoint, yPoint, 4, 4); 
    //then set new center x and y 
    } 

    void drawNewRotor(float cX, float cy, float rad) { 

    } 

} 

ответ

3

Вы можете использовать tan()

int f =100; 
size(300,300); 
stroke(0); 
translate(width/2, height/2); 
for(int i = 0; i< 360; i++){ 
    point(cos(radians(i))*f,sin(radians(i))*f); 
    point(f,tan(radians(i))*f); 
    point(tan(radians(i))*f,f); 
    } 
Смежные вопросы