Object 处理:如何使对象沿圆形路径移动?

Object 处理:如何使对象沿圆形路径移动?,object,geometry,processing,trigonometry,calculus,Object,Geometry,Processing,Trigonometry,Calculus,我已经创建了一个类,在这个类中我为我的程序定义了形状对象。每个形状都有一个围绕它绘制的透明椭圆(我在构造函数中定义了它),如果任何其他形状移动到该圆形椭圆区域,我希望该形状改变其方向,使其沿圆形路径移动 每个形状对象都有一个定义的半径属性(因为我在每个对象周围绘制了椭圆),我想使用该值来确定形状在碰撞时必须移入的圆形图案有多大 请帮忙!非常感谢您所做的一切 编辑: 如上所述,我希望形状移动到圆形路径中。但是,我只希望它在一个圆形路径中移动一次(意思是它绕一个圆形移动一次),然后我希望它在编程时使

我已经创建了一个类,在这个类中我为我的程序定义了形状对象。每个形状都有一个围绕它绘制的透明椭圆(我在构造函数中定义了它),如果任何其他形状移动到该圆形椭圆区域,我希望该形状改变其方向,使其沿圆形路径移动

每个形状对象都有一个定义的半径属性(因为我在每个对象周围绘制了椭圆),我想使用该值来确定形状在碰撞时必须移入的圆形图案有多大

请帮忙!非常感谢您所做的一切

编辑:


如上所述,我希望形状移动到圆形路径中。但是,我只希望它在一个圆形路径中移动一次(意思是它绕一个圆形移动一次),然后我希望它在编程时使用的原始路径上继续运行。

简单的答案是,您必须使用基本trig来计算点之间的角度,然后进行更基本的trig,以确定循环路径上的后续点

有关更多信息,请查看的三角法部分

但基本上,如果有两点,可以使用
atan2()
函数计算两点之间的角度。你可以用它来找到从圆心到形状的起始角度

一旦你有了这个角度,你可以简单地增加它,然后使用
cos()
sin()
计算出这个新角度的
x
y
坐标

以下是完成上述所有操作的基本草图:

PVector中心;
浮动角;
浮动半径;
无效设置(){
大小(500500);
中心=新的PVector(宽度/2,高度/2);
//获得初始点
//对于您来说,这将是对象的初始位置
PVector点=新PVector(随机(宽度)、随机(高度));
//找出点之间的角度
浮动deltaX=中心.x-点.x;
浮动三角洲=中心.y-点.y;
角度=atan2(三角洲、三角洲);
//求圆的半径
半径=距离(中心x,中心y,点x,点y);
椭圆模型(半径);
}
作废提款(){
背景(0);
//画出中心点
椭圆(中心x,中心y,10,10);
//根据角度查找点
浮动x=中心x+cos(角度)*半径;
浮动y=中心。y+sin(角度)*半径;
//画出旅行点
椭圆(x,y,10,10);
//增加角度以移动点
角度+=PI/120;
}

简单的回答是,您必须使用基本trig来计算点之间的角度,然后使用更基本的trig来确定圆形路径上的后续点

有关更多信息,请查看的三角法部分

但基本上,如果有两点,可以使用
atan2()
函数计算两点之间的角度。你可以用它来找到从圆心到形状的起始角度

一旦你有了这个角度,你可以简单地增加它,然后使用
cos()
sin()
计算出这个新角度的
x
y
坐标

以下是完成上述所有操作的基本草图:

PVector中心;
浮动角;
浮动半径;
无效设置(){
大小(500500);
中心=新的PVector(宽度/2,高度/2);
//获得初始点
//对于您来说,这将是对象的初始位置
PVector点=新PVector(随机(宽度)、随机(高度));
//找出点之间的角度
浮动deltaX=中心.x-点.x;
浮动三角洲=中心.y-点.y;
角度=atan2(三角洲、三角洲);
//求圆的半径
半径=距离(中心x,中心y,点x,点y);
椭圆模型(半径);
}
作废提款(){
背景(0);
//画出中心点
椭圆(中心x,中心y,10,10);
//根据角度查找点
浮动x=中心x+cos(角度)*半径;
浮动y=中心。y+sin(角度)*半径;
//画出旅行点
椭圆(x,y,10,10);
//增加角度以移动点
角度+=PI/120;
}

嗯,在我看到凯文的帖子之前,我也写了一篇。不使用对象,只是一个简单的程序示例。仍在发布:)

PVector位置,速度,已存储;
浮球直径=40;
布尔值=假;
浮动角度=0;
无效设置(){
大小(300300);
//任意定位和超速
pos=新的PVector(-20,高度/2);
速度=新PVector(1,0);
仰泳();
}
作废提款(){
背景(5);
//正常增量速度
如果(!惊奇){
位置添加(速度);
}否则{
//如果你想知道。。。

如果(angle嗯,在我看到Kevin的帖子之前,我也做了一个。不使用对象,只是一个简单的程序示例。不管怎样,帖子:)

PVector位置,速度,已存储;
浮球直径=40;
布尔值=假;
浮动角度=0;
无效设置(){
大小(300300);
//任意定位和超速
pos=新的PVector(-20,高度/2);
速度=新PVector(1,0);
仰泳();
}
作废提款(){
背景(5);
//正常增量速度
如果(!惊奇){
位置添加(速度);
}否则{
//如果你想知道。。。
如果(角度