Создание точки структуры и последующее вычисление расстояния между двумя точками

Мне нужна помощь, чтобы понять, как создать точку структуры.

Мне нужны два поля x и y, затем я хочу создать функцию, которая вычисляет расстояние между этими двумя точками.

Что у меня есть прямо сейчас:

function [ out ] = pointDist3( pointpair1, pointpair2)
%FUNCTION pointDist3 takes in any two pairs of points and 
% Calling sequence:
%   out = pointDist3(varargin)
%DEFINE VARIABLES
% minargs, maxargs = error checking variables 
% pointpair1 = structure containing fields for point 1: x1 and y1
% pointpair2 = structure containing fields for point 2: x2 and y2
% out = structure containing field distance

%CHECK FOR VALID INPUT
if ~isfield(pointpair1,'x', pointpair2, 'x' ) || ~isfield(pointpair1,'y', pointpair2, 'y')
    error('Input argument does not contain fields "x" and "y" for both points');
else

    out = sqrt((pointpair1.x-pointpair2.x)^2+(pointpair1.y-pointpair2.y)^2);

   end

end

person Venom    schedule 28.11.2014    source источник
comment
В чем вопрос? Ваш код работает или нет?   -  person David    schedule 28.11.2014
comment
Я пытаюсь ответить на этот вопрос: определить точку структуры, содержащую два поля, x и y. Поле x будет содержать положение x точки, а поле y будет содержать положение y точки. Затем напишите функцию pointDist3, которая принимает две точки и возвращает расстояние между двумя точками на декартовой плоскости. Обязательно проверьте количество входных аргументов в вашей функции. ‹p›Нет, это не работает, потому что оно застревает на операторе if.   -  person Venom    schedule 28.11.2014
comment
Я получаю эту ошибку «Ошибка при использовании isfield» «Слишком много входных аргументов». 'Ошибка в pointDist3 (строка 28), если ~isfield(pointpair1,'x', pointpair2, 'x' ) || ~isfield(pointpair1,'y', pointpair2, 'y')'   -  person Venom    schedule 28.11.2014
comment
Посмотрите документацию isfield, вы используете ее неправильно.   -  person David    schedule 28.11.2014


Ответы (1)


Спасибо Давид за исправление! Вот рабочая версия

function [ out ] = pointDist3( pointpair1, pointpair2)
%FUNCTION pointDist3 takes in any two pairs of points and 
% Calling sequence:
%   out = pointDist3(varargin)
%DEFINE VARIABLES
% minargs, maxargs = error checking variables 
% pointpair1 = structure containing fields for point 1: x1 and y1
% pointpair2 = structure containing fields for point 2: x2 and y2
% out = structure containing field distance

%CHECK FOR VALID INPUT
    if ~isfield(pointpair1,'x')|| ~isfield(pointpair2, 'x' ) || ~isfield(pointpair1,'y') || ~isfield(pointpair2, 'y')
        error('Input argument does not contain fields "x" and "y" for both points');
    else

        out = sqrt((pointpair1.x-pointpair2.x)^2+(pointpair1.y-pointpair2.y)^2);
    end 
end

ТЕСТЕР:

   >> pointA.x = 3

pointA = 

    x: 3

>> pointA.y =4

pointA = 

    x: 3
    y: 4

>> pointB.x=4

pointB = 

    x: 4

>> pointB.y=5

pointB = 

    x: 4
    y: 5

>> pointDist3(pointA, pointB)

ans =

    1.4142
person Venom    schedule 28.11.2014