The starting coordinate and number of vertices cannot be controlled by drawpolygon(). However, you can control whether the polygon created by the user is accepted or not.
In this script, instructions are displayed below the main axes. The user must start at (0,0) and there must be 8 vertices. In reality, it's virtually impossible to manually select (0.000, 0.000) so if the user starts "near" to (0,0) (with less than 0.1 error in x or y directions), the starting coordinate is accepted. If the user starts outside of that threshold, or if the user selects more or less vertices than 8, the polygon will be deleted and the user will have to start over. If they obey those two requirements, the polygon is first shifted to the true (0,0) starting point and then the shape is accepted.
Play around with this functional example and you can tweek it to your needs.
fh = figure;
axh = axes('Position', [.13 .18 .78 .73]);
axhTxt = axes('Position', [.13 .01 .78 .12], 'Visible', 'Off');
xlim(axh, [-5 5])
ylim(axh, [-5 5])
nVertices = 8;
instructions = sprintf('Draw %d vertices. The first one should be at (0,0).', nVertices);
th = text(axhTxt, .5, .5, instructions, ...
'VerticalAlignment', 'Middle', 'HorizontalAlignment', 'Center');
userFailed = true;
while userFailed && isvalid(fh)
h = drawpolygon(axh);
maxError = 0.1;
userFailed = isvalid(fh) && ((size(h.Position,1) ~= nVertices) || (any(h.Position(1,:) >= maxError)));
if ~userFailed && isvalid(fh)
h.Position = h.Position - h.Position(1,:);
th.String = 'Good job.';
elseif userFailed && isvalid(fh)
th.String = sprintf('Try again! %s', instructions);