绘制图像以适合圆圈

时间:2010-10-20 22:26:33

标签: c#

我正在为我正在制作的游戏制作一个库存屏幕,我希望能够绘制一系列代表库存中每个项目的面板。我希望能够将这些面板安装在圆形路径上。  这是我用我的意思做的模拟

http://fc02.deviantart.net/fs70/f/2010/280/7/2/khmp_magic_menu_concept_by_magna_alphamon-d30a7em.png

基本上我希望能够,给出一个半径,一个中心点和y坐标来开始绘制,绘制这一系列的面板,使它们与图像中的圆的路径对齐。

计算y维度很简单,它只是起始位置y +面板高度*面板索引,但我不确定如何计算可变半径/中心点圆的x。

任何帮助将不胜感激。

这是在C#中,但只要我可以转换它就可以在C / C ++中使用类似的东西

提前致谢

编辑:要进行校准,y的位置相对于屏幕的顶部或底部,并且与圆圈无关。如果给定的y没有映射到圆上的某个点,那么我将丢弃该点并且不绘制该面板。

虽然理想情况下我希望能够使用任何椭圆形状(给定两个半径),圆圈也会很好

3 个答案:

答案 0 :(得分:1)

设cx,cy为中心点的坐标。设r是圆的半径。设y为绘制y坐标,x为x坐标。您观察到y = cy +面板高度*面板索引。通过直角三角形的魔力,这意味着x ^ 2 + y ^ 2 = r ^ 2。求解x,得到x = cx + sqrt(r^2 - (y-cy)^2)

编辑:转换为代码:

#include <math>
float ordinate(float cx, float cy, float r, float y) {
    // assumes cx and cy are in the same coordinate system as x and y
    // assumes the coordinate origin is in the lower left corner.
    return cx + sqrtf(powf(r,2) - powf(y-cy,2));
}

答案 1 :(得分:0)

我很蠢。在看到Eric的回答之后,我记得我可以根据需要重新排列并解决圆或椭圆的方程。

由于

答案 2 :(得分:-3)

您可以使用旋转矩阵。这是一个简单的算法,它找到下一个点{x,y},使得它围绕一个圆旋转θ弧度。你可以从x =半径和y =半径的第一项开始(在任何地方,只要你知道它将包含一个项目),然后在循环浏览项目时继续增加theta。

Point Rotate(int x, int y, float theta)
  int x_p = (x * Math.Cos(theta)) - (y * Math.Sin(theta));
  int y_p = (y * Math.Cos(theta)) + (x * Math.Sin(theta));
  return new Point(x_p, y_p);
end

旁注;我总是首选“Bolt1,Bolt2,Bolt3”为“Thunder,Thundara,Thundaga”= P