0

我正在绘制一个简单的网格,并且我希望最靠近屏幕中心的线以不同的颜色突出显示。

确定画出的线与屏幕中心非常相似的公式是什么?

它不必是确切的中心,只要一个似乎在屏幕中间即可。但它必须是一条被绘制的线。用户可以随时更改网格的大小,因此这条线必须随之移动。

我正在使用不同的笔划颜色在屏幕上绘制一条新线,但我无法确定要重叠哪条线。我可以靠近,但我总是偏离几个像素。

在 Photoshop 中查看这张照片。绿线代表图像的真实中心。粉红色的线是所需的结果(中心线),因为网格不符合屏幕尺寸(查看右侧最后一个网格),网格为 34x34,屏幕尺寸为 320 x 480。

例子

如何绘制网格:

int xStart = 0, yStart = 0;
int gsX = 19; //Distance between lines
int gsY = 25;

        // draw vertical lines
        for(int xId=0; xId<=(screenWidth/gsX); xId++) {
            int x = xStart + xId * gsX;
            [gPath moveToPoint:CGPointMake(x, yStart)];
            [gPath addLineToPoint:CGPointMake(x, yStart+screenHeight)];

        }
        // draw horizontal lines
        for(int yId=0; yId<=(screenHeight/gsY); yId++) {
            int y = yStart + yId * gsY;
            [gPath moveToPoint:CGPointMake(xStart, y)];
            [gPath addLineToPoint:CGPointMake(xStart+screenWidth, y)];

        }

我的中心线代码: 这会根据网格间距值移动线,但不会在靠近中心的线之一上绘制。

int x = (screenWidth/gsX) /2;
NSLog(@"New X: %i gsX: %i",x, gsX);

//Veritical
[centerLines moveToPoint:CGPointMake(x, 0)];
[centerLines addLineToPoint:CGPointMake(x, screenHeight)];
4

3 回答 3

1

其实每一个都是对的。实际上,不久前我遇到了类似的事情。我无法解释,但感觉操作顺序没有正确遵循。所以我把你的方程分解了,这样你就可以按照操作的顺序。无论如何,您的解决方案如下。

    int centerX = (screenWidth/gsX);
    int tempA = ( centerX / 2 );
    int tempB = tempA * gsX;
    NSLog(@"screenwidth / gsX = %i", centerX);
    NSLog(@"Temp A: %i ", tempA);
    NSLog(@"Temp B: %i ", tempB);


    //Veritical
    [centerLines moveToPoint:CGPointMake(tempB, 0)];
    [centerLines addLineToPoint:CGPointMake(tempB, screenHeight)];

这是正在发生的事情。您已经在网格代码中的某一点绘制了这条线。你只需要弄清楚它是哪一个。你知道 screenWidth/gsX 是最后一条将被绘制的线。所以这个数字除以 2 就是中间线。它已经是 screenSize 的一个因素。然后乘以它以你的网格有多大作为数字。因为它是最靠近中心的“中线”(screenWidth/gsX),所以你的线应该显示在网格的顶部

那应该总是画一条中间线。我没有看到您更改颜色的任何代码。因此,您将不得不盲目相信它正在被绘制。如果您可以更改线条颜色,您应该能够看到它。

我会把它留给你来弄清楚水平。(提示:它处理 y 值 ;-))

我希望这有帮助!

玩得开心,祝伯恩先生好运!

于 2013-05-14T13:09:56.567 回答
0

中心是

int centerX = ((screenWidth/2) / gsX )* gsX;
int centerY = ((screenHeight/2) / gsY ) * gsY;

只要确保你在上面做整数数学!没有花车。它应该可以正常工作。

于 2013-05-14T03:17:31.167 回答
0
int x = xStart + (screenWidth/gsX)/2 * gsX;
于 2013-05-14T03:18:18.860 回答