Iphone 在正方形和矩形像素坐标之间转换

Iphone 在正方形和矩形像素坐标之间转换,iphone,math,graphics,Iphone,Math,Graphics,我对使用变换和这类数学很在行,希望能有一些方向来解决我的编码问题。我正在为iphone编写XCode,并且正在使用CGraphics 问题: 在Xcode中,我想绘制曲线、直线等,这是一个正方形像素的屏幕。 然后将这些点尽可能地转换为非方形像素系统 例如,如果原始坐标系是500 x 500像素,显示在10 x 10英寸的正方形屏幕上,我用圆公式画一个圆。它看起来很圆,一切都很好 现在,我在第二个10 x 10英寸的屏幕上画相同的圆,这个屏幕是850像素x 500像素。在不改变坐标的情况下,同一个

我对使用变换和这类数学很在行,希望能有一些方向来解决我的编码问题。我正在为iphone编写XCode,并且正在使用CGraphics

问题: 在Xcode中,我想绘制曲线、直线等,这是一个正方形像素的屏幕。 然后将这些点尽可能地转换为非方形像素系统

例如,如果原始坐标系是500 x 500像素,显示在10 x 10英寸的正方形屏幕上,我用圆公式画一个圆。它看起来很圆,一切都很好

现在,我在第二个10 x 10英寸的屏幕上画相同的圆,这个屏幕是850像素x 500像素。在不改变坐标的情况下,同一个圆公式显示的东西看起来像一个鸡蛋

如何在第二个屏幕上以不同的坐标系绘制圆?另外,我需要单独访问点x,y的集合


你需要一个仿射变换,一个简单的变换,只是缩放。请参见“二维图形中的示例”一节,您需要缩放块。

这是一个将世界坐标转换为屏幕坐标的简单问题

我知道最初的问题是关于圆的,但为了更简单的伪代码和数学示例,我将使用square

考虑一个简单的例子,在这个例子中,您将绘制一个正方形,该正方形在世界坐标中建模为
[0,0]
的一个角和
[1,1]
的另一个角。您希望在第一个示例屏幕(每个维度的像素从0到500延伸)上看到的是
[0,0]
的一个角,以及像素空间中
[500,500]
的另一个角

这是一个简单的矩阵变换,称为a。简而言之,您需要的比例矩阵在每个对角线条目上都有相同的比例因子,在其他地方都有零。作为伪代码编写(使用
*
作为

worldCorner0 = {0, 0};
scaleMatrix = {500, 0,
               0, 500};
pixelCorner0 = scaleMatrix * worldCorner0;

worldCorner1 = {1, 1};
pixelCorner1 = scaleMatrix * worldCorner1;
结果将是
pixelCorner0={0,0}
pixelCorner1={500,500}

现在,在你的另一个例子中,你有一个非正方形的屏幕,但是你仍然想要画出没有失真的正方形。您仍然需要一个缩放矩阵,但是,如果您希望在屏幕上看到整个正方形,则应继续按屏幕尺寸中最小的像素数进行缩放。如果使用较大的数字,则正方形将延伸出可见区域(但仍然是正方形)

在您的情况下,第二个屏幕在一个维度上的最大范围为800像素,在另一个维度上的最大范围为500像素。方便的是,您已经有了一个缩放500像素的缩放矩阵。如果绘制上述像素角点,则无论屏幕尺寸如何,都将保留几何体