私はプログラミングとObjective-cに不慣れであり(したがって、ここから離れることができます)、Objective C第4版の教科書でプログラミングを進めており、演習の1つに固執しています。
以下の方法の何が問題になっているのか誰かに教えてもらえますか?私のプログラムには、幅、高さ、および原点(XYPointと呼ばれるクラスから)を設定するメソッドを持つ長方形クラスがあります。
containsPointメソッドは、長方形の原点が別の長方形内にあるかどうかを確認します。このメソッドをテストすると、長方形に点が含まれている場合でも、常に「いいえ」が返されます。
交差メソッドは、引数(aRect)として長方形を取り、ifステートメントでcontainsPointメソッドを使用して、受信者と交差するかどうかを確認します。交差する場合は、交差に原点があり、正しい幅と高さの長方形を返します。
-(BOOL) containsPoint:(XYPoint *) aPoint
{
//create two variables to be used within the method
float upperX, upperY;
//assign them values, add the height and width to the origin values to range which the XYPoint must fall into
upperX = origin.x + height;
upperY = origin.y + width;
//if the value of aPoint's x and y points fall between the object's origin and the upperX or upperY values then the rectangle must contain the XYPoint and a message is sent to NSLog
if ((aPoint.x >= origin.x) && (aPoint.x <= upperX) && (aPoint.y >= origin.y) && (aPoint.y <= upperY) )
{
NSLog(@"Contains point");
return YES;
}
else
{
NSLog(@"Does not contain point");
return NO;
}
}
-(Rectangle *) intersects: (Rectangle *) aRect
{
//create new variables, Rectangle and XYPoint objects to use within the method
Rectangle *intersectRect = [[Rectangle alloc] init];
XYPoint *aRectOrigin = [[XYPoint alloc] init];
float wi, he; //create some variables
if ([self containsPoint:aRect.origin]) { //send the containsPoint method to self to test if the intersect
[aRectOrigin setX:aRect.origin.x andY:origin.y]; //set the origin for the new intersecting rectangle
[intersectRect setOrigin:aRectOrigin];
wi = (origin.x + width) - aRect.origin.x; //determine the width of the intersecting rectangle
he = (origin.y + height) - aRect.origin.y; //determine the height of the intersecting rectangle
[intersectRect setWidth:wi andHeight:he]; //set the rectangle's width and height
NSLog(@"The shapes intersect");
return intersectRect;
}
//if the test returned NO then send back these values
else {
[intersectRect setWidth:0. andHeight:0.];
[aRectOrigin setX:0. andY:0.];
[intersectRect setOrigin:aRectOrigin];
NSLog(@"The shapes do not intersect");
return intersectRect;
}
}
次のコードでテストすると
int main (int argc, char * argv [])
{
@autoreleasepool {
Rectangle *aRectangle = [[Rectangle alloc] init];
Rectangle *bRectangle = [[Rectangle alloc] init];
Rectangle *intersectRectangle = [[Rectangle alloc] init];
XYPoint *aPoint = [[XYPoint alloc] init];
XYPoint *bPoint = [[XYPoint alloc] init];
[aPoint setX:200.0 andY:420.00];
[bPoint setX:400.0 andY:300.0];
[aRectangle setWidth:250.00 andHeight:75.00];
[aRectangle setOrigin:aPoint];
[bRectangle setWidth:100.00 andHeight:180.00];
[bRectangle setOrigin:bPoint];
printf("Are the points within the rectangle's borders? ");
[aRectangle containsPoint: bPoint] ? printf("YES\n") : printf("NO\n");
intersectRectangle = [aRectangle intersects:bRectangle];
}
return 0;
}
次の出力が得られます
Contains point
The origin is at 0.000000,0.000000, the width is 250.000000 and the height is 75.000000