Skip to content
design
Components

Cruising trimaran

The vessel profile's outline for a cruising trimaran, and the vessels it draws.

On this page
WLLWL 15.22 mLOA 15.98 mDraft 1.91 mFreeboard 2.10 m
The cruising trimaran outline as drawn, dimensioned in meters read from its marked points.
Code
import { CRUISING_TRIMARAN, VesselProfile, type VesselOutline } from "@bosunkit/components/vessel-profile";
import type { ReactElement } from "react";

export const description: string =
  "The cruising trimaran outline as traced at 15.98 m, dimensioned in meters read from the points marked on it.";

const outline: VesselOutline = CRUISING_TRIMARAN;

/** Drawing units to the meter: the length overall, from the transom to the bow's tip, is the reference length. */
const perMeter: number = (outline.hooks.bowTip - outline.hooks.transom) / outline.referenceLength;

/** A distance on the drawing, in meters. */
function meters(units: number): string {
  return `${(units / perMeter).toFixed(2)} m`;
}

export default function Drawn(): ReactElement {
  const { hooks }: VesselOutline = outline;
  return (
    <VesselProfile
      outline={outline}
      dimensions={{
        lengthOverall: meters(hooks.bowTip - hooks.transom),
        waterlineLength: meters(hooks.waterlineForward - hooks.waterlineAft),
        draft: meters(hooks.keelFoot - hooks.waterline),
        freeboard: meters(hooks.waterline - hooks.deckAtBow),
      }}
    />
  );
}

The cruising trimaran outline is traced from YACHT magazine's side elevation of the Neel 52, a trimaran of 15.98 m: the hulls as the drawing paints them from the side, with a stepped stern and a plumb bow, the deckhouse with its saloon windows and raked windscreen, the hardtop reaching aft over the open cockpit on its post, and the hull window. Under the boot stripe are the canoe body, the fin keel, the saildrive and the spade rudder. The rig, the bowsprit and the flag are left out. The drawing marks no waterline, so the trace sets it at YACHT's draft of 1.90 m above the keel's foot; the transom is immersed, so a shorter waterline comes off the bow.

The outline is traced at 15.98 m and listed in VESSEL_OUTLINES as cruising-trimaran; the kit exports it as CRUISING_TRIMARAN. The vessel catalog's trimarans, three models, take this outline. Given a vessel's proportions, the vessel profile stretches it to her length overall, waterline length, freeboard and draft; a particular not given follows the length overall in the outline's proportion.

Examples

Vessels from this outline

WLLOA 12.90 mDraft 1.50 m
Neel 43
WLLOA 14.20 mDraft 1.60 m
Neel 47
WLLOA 15.85 mDraft 1.90 m
Neel 52
The Neel 43, Neel 47 and Neel 52, each drawn from the cruising trimaran outline at her own particulars and to one scale.
Code
import { CRUISING_TRIMARAN, VesselProfile } from "@bosunkit/components/vessel-profile";
import type { ReactElement } from "react";

export const description: string =
  "The Neel 43, Neel 47 and Neel 52, each drawn from the cruising trimaran outline at her own particulars and to " +
  "one scale.";

interface Vessel {
  /** The vessel, as the catalog names her. */
  readonly name: string;
  /** Length overall, meters. */
  readonly loa: number;
  /** Length at the waterline, meters, where the catalog has it. */
  readonly lwl?: number;
  /** Draft, meters. */
  readonly draft: number;
  /** Freeboard at the bow, meters, where the catalog has it. */
  readonly freeboard?: number;
}

/** Particulars from the vessel catalog. */
const VESSELS: readonly Vessel[] = [
  { name: "Neel 43", loa: 12.9, draft: 1.5 },
  { name: "Neel 47", loa: 14.2, draft: 1.6 },
  { name: "Neel 52", loa: 15.85, draft: 1.9 },
];

export default function Vessels(): ReactElement {
  return (
    <div style={{ display: "grid", gap: "var(--space-md)" }}>
      {VESSELS.map(
        ({ name, loa, lwl, draft, freeboard }: Vessel): ReactElement => (
          <figure key={name} style={{ margin: 0 }}>
            <VesselProfile
              outline={CRUISING_TRIMARAN}
              proportions={{ lengthOverall: loa, waterlineLength: lwl, draft, freeboard }}
              frameLength={15.85}
              dimensions={{
                lengthOverall: `${loa.toFixed(2)} m`,
                waterlineLength: lwl === undefined ? undefined : `${lwl.toFixed(2)} m`,
                draft: `${draft.toFixed(2)} m`,
              }}
            />
            <figcaption style={{ marginTop: "var(--space-xs)", color: "var(--text-dim)", fontSize: "0.85em" }}>
              {name}
            </figcaption>
          </figure>
        ),
      )}
    </div>
  );
}
  • Vessel profile: the component, its props, and the outline for each hull shape.